python中的tcp服务器不处理多个客户端
我需要一个TCP服务器在Raspberry Pi上运行,它将允许多个同时的客户端连接,处理请求,允许客户端优雅地断开连接,并永远继续侦听。我在这里的一篇老文章中发现了一些代码,这些代码很接近,但有一些问题我找不到解决方案。服务器脚本是:python中的tcp服务器不处理多个客户端,python,linux,sockets,tcp,Python,Linux,Sockets,Tcp,我需要一个TCP服务器在Raspberry Pi上运行,它将允许多个同时的客户端连接,处理请求,允许客户端优雅地断开连接,并永远继续侦听。我在这里的一篇老文章中发现了一些代码,这些代码很接近,但有一些问题我找不到解决方案。服务器脚本是: import socket,threading TIP = '192.168.99.161' TPORT = 3006 BUFFER_SIZE = 20 class ClientThread(threading.Thread): def __i
import socket,threading
TIP = '192.168.99.161'
TPORT = 3006
BUFFER_SIZE = 20
class ClientThread(threading.Thread):
def __init__(self,ip,port,socket):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
self.socket = socket
print "[+] New thread started for "+ip+":"+str(port)
def run(self):
print "Connection from : "+ip+":"+str(port)
clientsock.send("\nRPI02\n")
data = "111"
eof=False
while len(data):
data = clientsock.recv(20)
for c in data:
print ("%02X"%(ord(c)))
if(c == 'z'):
eof=True
if(eof):
# simulated packet:
clientsock.send("packet was processed.")
eof = False
print "%s:%d disconnected"%(ip,port)
host = "0.0.0.0"
port = 9999
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind((TIP,TPORT))
threads = []
while True:
tcpsock.listen(4)
print "\nListening for incoming connections..."
(clientsock, (ip, port)) = tcpsock.accept()
newthread = ClientThread(ip, port,clientsock)
newthread.start()
threads.append(newthread)
for t in threads:
t.join()
tcpsock.shutdown(sock.SHUT_RDWR)
tcpsock.close()
如果我运行一个客户机,我可以毫无问题地处理数据(发送许多字节)
这个系统的期望是,我不希望连接两个以上的客户端。当客户端连接时,它将发送3-4字节的请求数据,一旦收到应答,它将断开连接(客户端上的另一个Pi)
我用两个客户端窗口运行了一个测试,一个发送“123”,另一个发送“abc”。从客户端发送一个“z”会得到一条确认已处理数据包的服务器消息
以下是测试运行:
mpi@RPI01 ~/iorelay $ python erc-test.py
Listening for incoming connections...
[+] New thread started for 192.168.99.99:64351
Listening for incoming connections...
Connection from : 192.168.99.99:64351
31
32
33
7A
[+] New thread started for 192.168.99.99:64361
Listening for incoming connections...
Connection from : 192.168.99.99:64361
61
62
63
7A
31
61
62
63
61
62
63
192.168.99.99:64361 disconnected
192.168.99.99:64361 disconnected
我在这里看到几个问题:
感谢您在这方面的帮助-仍在学习Python 有几件有趣的事情-1)为什么你说数据没有从第一个客户端接收到?还不清楚-你也可以发布你的客户程序吗?我相信,如果我试着自己运行其中一些,看看到底是什么问题,可以解释您的一些问题。我不再看到接收到的每个字节的print语句,因此我假设clientsock.recv()没有返回任何内容(不确定)。没有客户端程序-我打开多个命令窗口并在python服务器中运行telnet。连接第二个telnet会话后,您应该能够在第一个telnet会话中看到无接收问题…可能您应该粘贴客户端代码。你的最后一条“断开的线路令人惊讶”,所以我想亲自运行它,看看真正的问题是什么。