我正在开发一个P2P应用程序,并且希望节点同时充当客户端和服务器。例如,说我建立一个监听节点,在一个goroutine中运行下面的代码:从正在侦听的同一端口拨号地址
ln, _ := net.Listen("tcp", ":8080")
for {
conn, err := ln.Accept()
.....
}
然后,在另一个goroutine中的逻辑已确定它必须与另一个节点,让它知道它的存在,说在localhost地址“:8081”上也有类似的监听循环运行。
如果我只是使用net.Dial("tcp", ":8081")
,它会选择一个随机的端口号进行连接,并且8081
上的节点将尝试联系该端口而不是8080
上的正确端口。有没有办法从8080
开始拨打net.Dial
?这样的事情甚至是被允许的,或者听众会感到困惑并且拦截由net.Dial
返回的套接字的通信?
所以,当一个节点连接到你,你尝试连接回套接字的远程端口上?你确实意识到套接字是双向的,对吧?还是有更复杂的事情需要每个节点之间有两个连接? –
为什么它很重要从哪个端口拨出? – Adrian
当新节点启动时,它有一个需要ping的地址列表。您必须首先在与您联系之前ping这些节点 – jeanluc