Python 原始套接字不打印接收的数据(但正在发送)



我正在向服务器发送两个请求,代码如下:

import sys
import socket
s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.connect((sys.argv[1], 3232))
s.send('HELPn')
print("1stn" + s.recv(4096))
s.send('HELPn')
print("2ndn" + s.recv(4096))
s.close()

HELP应该始终返回一些东西;例如,如果使用netcat:

# nc 10.x.x.x 3232
HELP
* LIST OF VALID COMMANDS:
...

我上面发布的代码并不总是输出HELP响应。例如;它只会很少显示recv输入;有时从不(下面,甚至没有显示1st(:

# python example.py 10.x.x.x
1st
Welcome to...
2nd
* LIST OF VALID COMMANDS:
...

我以为HELP没有发送,所以我打开wireshark并看到以下内容; 所以它似乎正在正确发送:

HELP
* LIST OF VALID COMMANDS:
...
HELP
* LIST OF VALID COMMANDS:
...

有什么想法吗?我不确定我可能做错了什么。

经过一些实验,我设法修复了代码。服务器在连接时发回数据;因此,在初始连接时,您必须s.recv();我这样做了,应用程序的行为符合我的预期。

修改后的代码:

import sys
import socket
s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.connect((sys.argv[1], 3232))
print("0thn" + s.recv(4096))
s.sendall('HELPn')
print("1stn" + s.recv(4096))
s.sendall('HELPn')
print("2ndn" + s.recv(4096))
s.close()

这将始终返回以下内容:

# python /tmp/test.py 10.x.x.x
0th
Welcome to...

1st
* LIST OF VALID COMMANDS:
...

2nd
* LIST OF VALID COMMANDS:
...

最新更新