(我是一个中国人,我在StackOverflow上发的英文问题,懒得重写了让AI翻译的,有些生草请见谅)
当我在开发一个程序时,遇到了一个问题:
(导入所有与Kademlia相关的,包括服务器)
node=Server()
node.bootstrap(iplist)
假设iplist是[('123.456.789.123',1023)],这是针对一个Kademlia服务器的。第一次启动客户端时,一切都很正常,它成功地进行了bootstrap。然而,当我重启客户端,并使用另一个IP地址但仍然是同一个客户端时,出了些问题。客户端再也无法接收任何UDP信息了。
我猜测,可能当我首次bootstrap服务器时,它返回了它的路由表,其中只包含它自己(它的IP和端口),然后服务器将客户端的IP-端口对添加到它的路由表中。然后客户端收到了它们并与之建立了连接。此外,客户端还将其服务器的IP-端口添加到其路由表中。
当我再次尝试连接时,服务器仍然返回了包含它自己的IP-端口以及已经未使用的IP-端口的路由表(因为客户端的IP是静态的),当客户端尝试使用未使用的IP-端口连接时,可能会卡住一些东西。
我对网络编程不是很有经验,所以请有人帮忙!
非常感谢!
-CyberGimen
是的,我尝试建立一个链接,比如说A、B、C是三个节点,C是我启动的服务器。我使用frp进行内网穿透,然后我也对B应用了frp,并让B去连接C的隧道,接着我启动A并做了同样的事情。到目前为止一切正常,当我向A发送UDP时,它在控制台上显示了消息。然而,当我重启B并更新A的连接(是的,也重启了A),我发现当我向A或B发送UDP时,它们都不能在控制台上显示消息。
如果我们忽略A,如果B再次重启,B仍然无法处理UDP!
请注意,无论我是否重启服务器,它都可以处理UDP。
所以也许bootstrap方法要负责,在客户端bootstrap时,服务器到底干了什么啊