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

Why is my program not sending keyboard data over socket?

我有一个简单的程序,旨在通过 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. 小问题:

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

  2. 第一步:验证你可以send/receive 任何东西:

    问:当您输入几个字符,然后点击 "return" 时,您是否看到套接字返回的数据?

    请确认"Yes"或"No"。

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

    试试 :

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

    如果您已验证第 2 步和第 3 步(您能够发送和接收数据,并且套接字缓冲不是问题),那么您已将问题隔离到 "stdin buffering"。

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

  5. 补充建议:

    为了排除故障,也可以尝试从 不同的 程序发送套接字数据:"telnet"、"curl"、第二个 Python 脚本,等等等等

请post回来告诉我们你找到了什么!