我正在用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
垃圾邮件。那么我的代码有什么问题,我该如何解决呢?
答案 0 :(得分:1)
TCPServer.socket
处于“监听”模式,你不能用它直接传输数据,你需要用新的套接字对象“连接”到它的地址:
import socket
while 1:
s = socket.create_connection(('127.0.0.1', 4242))
s.sendall(str(msg))
取决于服务器如何处理连接,您可以重用相同的套接字或在每个循环中创建一个新套接字。