首页 > 解决方案 > 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:
...

有任何想法吗?我不确定我做错了什么。

标签: pythonsocketsraw-sockets

解决方案


经过一些试验,我设法修复了代码。服务器在连接后发回数据;因此,在初始连接时,您必须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:
...

推荐阅读