我正在向服务器发送两个请求,代码如下:
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:
...