为什么我的程序没有通过套接字发送键盘数据?

时间:2019-03-31 00:16:11

标签: python sockets buffering

我有一个简单的程序,旨在通过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))

编辑以澄清: 键盘数据未发送。

1 个答案:

答案 0 :(得分:0)

  1. 次要测验:

    正如user207421所说,“ \ n \ r”是错误的。正确的DOS CR / LF序列为'\r\n'
    谁知道-也许您根本不需要该“ replace()”。

  2. 第一步:验证您可以发送/接收任何东西

    问:当您输入几个字符然后按“返回”时,您是否看到套接字返回的数据?

    请确认“是”或“否”。

  3. Python套接字:尝试禁用Nagle

    尝试类似this的内容:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    
  4. 原始键盘输入:

    如果您已经验证了步骤2和3(可以发送和接收数据,并且套接字缓冲不是问题),那么您已将问题隔离为“标准输入缓冲”。

    在此处查找其他建议:unbuffered read from stdin in python

  5. 其他建议:

    要进行故障排除,还可以尝试通过 程序发送套接字数据:“ telnet”,“ curl”,第二个Python脚本等。

请发回邮件,让我们知道您的发现!