我有一个简单的程序,旨在通过TCP套接字发送原始文本数据。我认为这是一个缓冲问题;但我不确定。似乎没有数据发送。
from threading import Thread as thread
from sys import argv
from socket import socket
from tty import setraw
from sys import stdin
from sys import stdout
def rx(so):
while True:
stdout.write(so.recv(1).replace("\n", "\n\r"))
setraw(stdin.fileno())
so = socket()
so.connect((argv[1], int(argv[2])))
thread(target=rx, args=(so, )).start()
while True: so.send(stdin.read(1))
编辑以澄清: 键盘数据未发送。
答案 0 :(得分:0)
次要测验:
正如user207421所说,“ \ n \ r”是错误的。正确的DOS CR / LF序列为'\r\n'
。
谁知道-也许您根本不需要该“ replace()”。
第一步:验证您可以发送/接收任何东西 :
问:当您输入几个字符然后按“返回”时,您是否看到套接字返回的数据?
请确认“是”或“否”。
Python套接字:尝试禁用Nagle :
尝试类似this的内容:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
原始键盘输入:
如果您已经验证了步骤2和3(可以发送和接收数据,并且套接字缓冲不是问题),那么您已将问题隔离为“标准输入缓冲”。
在此处查找其他建议:unbuffered read from stdin in python
其他建议:
要进行故障排除,还可以尝试通过 程序发送套接字数据:“ telnet”,“ curl”,第二个Python脚本等。
请发回邮件,让我们知道您的发现!