2017-09-20 208 views
-1

我正在开发一个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返回的套接字的通信?

+1

所以,当一个节点连接到你,你尝试连接回套接字的远程端口上?你确实意识到套接字是双向的,对吧?还是有更复杂的事情需要每个节点之间有两个连接? –

+0

为什么它很重要从哪个端口拨出? – Adrian

+0

当新节点启动时,它有一个需要ping的地址列表。您必须首先在与您联系之前ping这些节点 – jeanluc

回答

0

如果您正在寻找控制本地端口拨出时,您可以使用net.DialTCP

+0

不幸的是,当使用相同的端口作为侦听器时不起作用。你会收到错误:'bind:address already in use' – jeanluc