现在写一个 python 的模拟请求客户端,原先有个其他人提供的 java 程序。这个 java 发送正常,可以成功收到响应。 使用 python socket 进行模拟,每次都是超时,接收不到任何数据,使用了多种方式仍然不行,使用 charles 做 端口转发,java 的也会失败,最后使用 wireshark 抓包。
19.53 是客户端,6.60 是服务器端。
图中,前面一个是 java 正常发送接收的例子,比较奇怪的是发出报文体( No193 ),接着 194 就发出了 “FIN ACK”。
从 No 1284 开始的是 python 请求,在发出报文体( No 1287 )后,服务器直接反馈了一个 ACK,并没有发出响应报文,后续进入超时等待的时间,直到 python 端发出 socket close ( No 1724 ),服务端才响应报文( No 1725 ),这个时候请求端已经关闭连接了,什么都没收到。
代码如下:
try:
self.sok.connect((ip, int(port)))
self.sok.send(msg)
self.sok.settimeout(int(timeout))
rsp = self.sok.recv(1024)
self.sok.close()
except Exception as ex:
print('socket_send: %s:%d ,error: %s' %
(ip, int(port), traceback.format_exc()))
rsp = b''
........
还使用了
try:
self.sok.connect((ip, int(port)))
self.sok.send(msg)
self.sok.settimeout(int(timeout))
while True:
data = self.sok.recv(1024)
print(data)
if not data:
break
total_data.append(data)
这几个都是一样的错误,现在很奇怪,为什么 java 的可以成功,python 的接收不到报文。 请大家帮忙看下。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.