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

时间:2017-10-24 10:14:34

标签: 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()

但我一直在我的控制台中发送Server not ready垃圾邮件。那么我的代码有什么问题,我该如何解决呢?

1 个答案:

答案 0 :(得分:1)

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

import socket

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

取决于服务器如何处理连接,您可以重用相同的套接字或在每个循环中创建一个新套接字。