如何从另一个线程通过TCPServer发送数据

2024-09-28 17:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个服务器,它基本上应该是一些串行设备(比如Arduino)和任何连接到它的客户端之间的管道

import SocketServer
import threading
import errno

def SerialThread():
    # Serial init is here
    while (True):
        msg = read_from_serial(blocking = True)
        #print(msg)
        try:
            server.socket.sendall(str(msg))
        except IOError, e:
            if e.errno == errno.EPIPE:
                print('Server not ready')

serial_daemon = threading.Thread(name='SerialThread', target=SerialThread)
serial_daemon.daemon = True
serial_daemon.start()

class TCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        print('#')

server = SocketServer.TCPServer(('127.0.0.1', 4242), TCPHandler)
print('Starting server')
server.serve_forever()

但我的控制台中不断收到垃圾邮件。那么,我的代码出了什么问题,我该如何修复它呢


Tags: import服务器trueserverdefserialmsgarduino
1条回答
网友
1楼 · 发布于 2024-09-28 17:16:16

TCPServer.socket处于“侦听”模式,您不能使用它直接传输数据,您需要使用新的套接字对象“连接”到其地址:

import socket

while 1:
    s = socket.create_connection(('127.0.0.1', 4242))
    s.sendall(str(msg))

根据您的服务器处理连接的方式,您可以重复使用相同的套接字,或者在每个循环中创建一个新的套接字

相关问题 更多 >