我想用Python为Raspberry PI创建一个脚本,我有个问题。
为了测试脚本,我在Windows 64位计算机上运行Python3.6。我希望使用TCP将“1”发送到端口1235上的本地地址(192.168.1.101/127.0.0.1)。
当我在原始模式下使用PuTTY时,我可以将这些数据发送到我的服务器,并立即得到正确的响应。
但是当我试图在Windows上使用Python来完成这个任务时,我会得到一个2分钟的延迟。我还可以看到命令仅在发送2分钟后由服务器接收,在这两分钟之后,我得到了一个即时的答复。
代码:
import socket
message = '\x31'.encode()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.1.101', 1235))
s.send(message) ; print ("send ready") ; data = s.recv(80) ; s.close(); print ("received"), repr(data)
#forgive me the ; ... I'm on a command line for testing.
#response is:
1
send ready
#2 minute delay
("None, "b"140,1,1,test\\r\n'")
我一直在尝试SOCKET_DGRAM
,RAW TCP NO DELAY
,SO_SNDBUF
等等,但我找不到这是从哪里来的。
发布于 2018-07-27 09:25:43
尝试在发送之后执行s.shutdown(socket.SHUT_WR)
,然后再执行recv; 关闭套接字的写入端 ,因此远程端知道发送者已完成并响应到目前为止收到的内容。 没有它,你需要一些特定于协议的方式来分隔消息(你的消息看起来太简单了,不能包含这样的分隔符)。Putty可能会设置套接字选项TCP_NODELAY,你可以自己尝试模拟它,尽管在一般情况下存在一些争议。
https://stackoverflow.com/questions/-100005833
复制相似问题