首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python的SocketServer不会握手

Python的SocketServer不会握手
EN

Stack Overflow用户
提问于 2014-11-25 11:11:23
回答 1查看 501关注 0票数 2

问题所在

我正在尝试使用Python附带的SocketServer,但在握手阶段我遇到了一些问题。只要我使用localhost或127.0.0.1,握手就能正常工作。然而,当我把我的eth0卡的IP,它就是不握手。我测试正式的示例代码在这里发现的

代码语言:javascript
复制
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()

终端片段:

代码语言:javascript
复制
manos@box:~$ netcat 10.2.203.26 9999
manos@box:~$
manos@box:~$ netcat localhost 9999
test

正如您在代码段中所看到的,尝试连接到10.2.293.26 (我的网卡的IP )是行不通的。一旦我试图连接到localhost,它就能正常工作!

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

在telnet上工作得很好

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

第一航站楼:

代码语言:javascript
复制
manos@box:~/tmp/test$ netcat -l 9999
(waiting)
test

第2航站楼:

代码语言:javascript
复制
manos@box:~$ netcat 10.2.203.26 9999
test
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-25 11:52:21

您将绑定到localhost,它不允许将机器接口/s的IP地址/es指定为连接主机上的目的地。

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

有关localhost127.0.0.10.0.0.0之间差异的更多信息,请参阅这个答案这一个

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27125082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档