[英]Python raw sockets not printing received data (but its being sent)
I am sending two requests to a server, code is below: 我正在向服务器发送两个请求,代码如下:
import sys
import socket
s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.connect((sys.argv[1], 3232))
s.send('HELP\n')
print("1st\n" + s.recv(4096))
s.send('HELP\n')
print("2nd\n" + s.recv(4096))
s.close()
HELP
should always return something; HELP
应该总是返回一些东西; for example if using netcat: 例如,如果使用netcat:
# nc 10.x.x.x 3232
HELP
* LIST OF VALID COMMANDS:
...
The code I posted above will not always output HELP
response. 我上面发布的代码将不会始终输出
HELP
响应。 For example; 例如; it will only show the
recv
input rarely; 它只会很少显示
recv
输入; sometimes never (below, the 1st
one isnt even shown): 有时从不(以下甚至没有显示
1st
一个):
# python example.py 10.x.x.x
1st
Welcome to...
2nd
* LIST OF VALID COMMANDS:
...
I thought that HELP
wasn't be sent, so I opened wireshark and seen the following; 我以为没有发送“
HELP
,所以我打开了Wireshk并看到了以下内容: so it appears to be sending properly: 因此它似乎发送正确:
HELP
* LIST OF VALID COMMANDS:
...
HELP
* LIST OF VALID COMMANDS:
...
Any ideas? 有任何想法吗? I'm not sure what I could be doing wrong.
我不确定自己可能做错了什么。
After some experimenting I managed to fix the code. 经过一些试验后,我设法修复了代码。 The server, upon connection sends back data;
服务器在连接后发回数据; so, on initial connection you must
s.recv()
; 因此,在初始连接时,您必须
s.recv()
; I did this and the application behaves as I would expect. 我做到了,应用程序的行为符合我的预期。
Modified code: 修改后的代码:
import sys
import socket
s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.connect((sys.argv[1], 3232))
print("0th\n" + s.recv(4096))
s.sendall('HELP\n')
print("1st\n" + s.recv(4096))
s.sendall('HELP\n')
print("2nd\n" + s.recv(4096))
s.close()
This returns the following always: 这总是返回以下内容:
# python /tmp/test.py 10.x.x.x
0th
Welcome to...
1st
* LIST OF VALID COMMANDS:
...
2nd
* LIST OF VALID COMMANDS:
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.