简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM