我正在开发一个P2P应用程序,并希望节点既可以作为客户端,也可以作为服务器。例如,假设我使用goroutine中运行的以下代码建立一个侦听节点:
ln, _ := net.Listen("tcp", ":8080")
for {
conn, err := ln.Accept()
.....
}
然后,在另一个goroutine中,逻辑确定它必须联系另一个节点让它知道它的存在,比如在本地主机地址“:8081”上,它也有类似的监听循环运行。
如果我只使用net.Dial("tcp", ":8081")
,它会选择要连接的随机端口号,8081
上的节点会尝试联系该端口,而不是8080
上的正确端口。有没有办法从net.Dial
发起8080
来电?是否允许这样的事情,或者听众是否会混淆并拦截net.Dial
返回的套接字的通信?