Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 温诺10053。如何继续通过TCP发送数据;“永远”;_Python_Sockets_Networking_Tcp - Fatal编程技术网

Python 温诺10053。如何继续通过TCP发送数据;“永远”;

Python 温诺10053。如何继续通过TCP发送数据;“永远”;,python,sockets,networking,tcp,Python,Sockets,Networking,Tcp,我目前正在尝试学习使用python进行联网。我对这个话题真的很陌生,所以我从类似的地方复制了一些例子 我想用TCP实现连续的数据传输。这意味着只要满足某些条件,我就要发送数据。因此,我稍微修改了下面的代码示例: 我的设置是使用Python 3.8的Win10 Myclient.py复制并修改了上述表格: # Echo client program import socket HOST = '192.168.102.127' # The remote host PORT = 21

我目前正在尝试学习使用python进行联网。我对这个话题真的很陌生,所以我从类似的地方复制了一些例子

我想用TCP实现连续的数据传输。这意味着只要满足某些条件,我就要发送数据。因此,我稍微修改了下面的代码示例:

我的设置是使用Python 3.8的Win10

My
client.py
复制并修改了上述表格:

# Echo client program
import socket

HOST = '192.168.102.127'    # The remote host
PORT = 21         
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
i=0 #For counting how often the string was sent
while True: #for testing this is forever
    s.sendall(b'Hello, world')
    data = s.recv(1024)#
    print(i)
    i=i+1
    print('Received', repr(data))

My
server.py

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 21             
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data: break
            conn.sendall(data)

我得到的错误是

ConnectionAbortedError:[WinError 10053]主机中的软件中止了已建立的连接
在客户端的
i=5460
(多次尝试)之后,以及

ConnectionResetError:[WinError 10054]服务器端的远程主机强制关闭了现有连接

我的短信越长,出错前发送的短信就越少

这使我相信我将数据发送到某种缓冲区,在抛出错误之前,缓冲区会被(过度)写入。 在寻找可能的解决方案时,我只找到了不同的实现,这并没有解决我的问题或使用其他软件

正如在一些类似问题的答案中所述,我禁用了防火墙并停止了杀毒,但没有明显的区别。 在查找错误时,也可能存在协议错误,但我不认为这是一个问题。 在阅读socket/TCP文档时,我发现TCP并不是针对这种问题而设计的,而是针对

client connects to server
           |
           V
client sends request to server
           |
           V
server sends request answer
           |
           V
server closes connection.
这是真的吗? 但我不能相信,对于发送的每个数据,都必须连接一个新的套接字,就像这样。这个解决方案也很慢。 但如果是这样的话,我可以选择什么

为了说明更大的情况:


我有一些其他的代码,这是给我的状态数据(文本)在500Hz。在Python中,我正在处理这些数据,并将处理后的数据发送到带有以太网屏蔽的Arduino。这些数据是“实时”数据,所以我需要尽快将数据发送到arduino。这里的客户机是Python,服务器是带有
以太网
模块的Arduino。连接和一切正常,只有连续发送数据是我的问题。

问题很可能是代码假设一端发送1024字节意味着另一端将接收1024字节。TCP不保证这一点,但它可能会发生一段时间,或者永远不会发生,或者偶尔发生,或者99.9%的时间,或者在这些范围内的任何地方发生。让服务器在点击
中断时打印消息,这可能是happening@barny我试着在休息前添加一个print语句,但在测试时它从未被击中。你还有其他想法吗?@barny你认为他的客户或服务器是这样认为的吗?或者两者都有?我看不出他的代码在哪里假设了这一点,或者这在哪里是一个问题。你真的在使用端口21吗?大多数平台不允许您在没有特殊权限的情况下监听端口21。启动客户端时,是否从服务器获得“连接方式”输出?