2017-10-24 3 views
0

Ich schreibe einen Server in Python, die als Pipe zwischen einem seriellen Gerät (wie Arduino) und einem Client, der damit verbunden ist, funktionieren sollte.So senden Sie Daten über TCPServer von einem anderen Thread

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() 

Aber ich halte Server not ready in meiner Konsole spammed bekommen. Also, was ist falsch an meinem Code und wie kann ich das beheben?

Antwort

1

TCPServer.socket ist im Modus „hören“, man kann es nicht direkt an trans-Daten verwenden, müssen Sie „connect“ an seine Adresse mit einem neuen Socket-Objekt:

import socket 

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

hängt davon ab, wie Sie Ihren Server Griff Verbindung , Sie könnten den gleichen Socket wiederverwenden oder einen neuen für jede Schleife erstellen.

Verwandte Themen