gpt4 book ai didi

Python 套接字服务器不会握手

转载 作者:可可西里 更新时间:2023-11-01 02:39:21 25 4
gpt4 key购买 nike

问题

我正在尝试使用 SocketServer随 Python 一起提供,但我在握手阶段遇到了一些问题。只要我使用 localhost 或 127.0.0.1,握手就可以正常工作。但是,当我输入 eth0 卡的 IP 时,它不会握手。我测试官方示例代码found here :

import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):

def handle(self):
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
self.request.sendall(self.data.upper())

if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()

终端片段:

manos@box:~$ netcat 10.2.203.26 9999
manos@box:~$
manos@box:~$ netcat localhost 9999
test

如您在代码片段中所见,尝试连接到我网卡的 IP 地址 10.2.293.26 无效。当我尝试连接到 localhost 时,它工作正常!

在 Wireshark 上,在第一个 SYN 从客户端发送到服务器后(在初始握手阶段),我得到一个 [RST, ACK]

与 telnet 配合良好

我的第一个猜测是这是一个重置连接的路由器。然而,情况并非如此,因为我可以 telnet 正常:

1 号航站楼:

manos@box:~/tmp/test$ netcat -l 9999
(waiting)
test

2 号航站楼:

manos@box:~$ netcat 10.2.203.26 9999
test

最佳答案

您正在绑定(bind)到 localhost,这不允许将机器接口(interface)的 IP 地址指定为连接主机上的目标。

您应该指定 0.0.0.0 或空字符串作为绑定(bind)操作中的机器地址(示例中的 HOST 参数)以允许远程主机指定任何机器的 IP 地址作为目的地。

有关localhost127.0.0.10.0.0.0 之间区别的更多信息,请参阅this answer或到 this one .

关于Python 套接字服务器不会握手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27125082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com