python - Python原始套接字不打印接收到的数据(但它正在发送)
问题描述
我正在向服务器发送两个请求,代码如下:
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
应该总是返回一些东西;例如,如果使用 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("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()
这总是返回以下内容:
# python /tmp/test.py 10.x.x.x
0th
Welcome to...
1st
* LIST OF VALID COMMANDS:
...
2nd
* LIST OF VALID COMMANDS:
...
推荐阅读
- vba - 在 Access 中创建 Outlook 收件箱电子邮件表
- python - 验证和训练不会同时收敛,但验证仍然会收敛
- ios - Unreal HandheldAR 模板:找不到异步加载代码请求的包 /Script/AugmentedReality 的文件
- python - 比较两个网络边缘列表
- informatica-powercenter - Informatica - 由于主键列的唯一约束违规而失败
- reactjs - 如何从 Draftjs 中检索文本
- javascript - 导入 opencv.js 和 yarn build 时 JavaScript 堆内存不足
- git - 如何创建从现有仓库到新仓库的拉取请求?
- python - Python setup.py 导入 python 文件
- php - PHP in_array() 关联数组问题