Python TCP Server



我写了一个简单的Python 3 TCP多线程服务器并远程登录。一切似乎都正常,直到我去关闭 telnet 连接。当我关闭telnet连接^]然后控制+d退出telnet时,服务器重复打印''。

我在这里缺少一些微不足道的东西来防止这种行为吗?

import socket 
from threading import Thread 
from socketserver import ThreadingMixIn 

# Multithreaded Python server : TCP Server Socket Thread Pool
class ClientThread(Thread): 

def __init__(self,ip,port): 
Thread.__init__(self) 
self.ip = ip 
self.port = port 
print ("[+] New server socket thread started for " + ip + ":" + str(port)) 

def run(self): 
while True : 
data = conn.recv(2048) 
#data = "Echo data: " + data.decode()
print ("Server received data: ", data)
conn.send(data)  # echo 

# Multithreaded Python server : TCP Server Socket Program Stub
TCP_IP = '0.0.0.0' 
TCP_PORT = 2004 
BUFFER_SIZE = 1024  # Usually 1024, but we need quick response 

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
tcpServer.bind((TCP_IP, TCP_PORT)) 
threads = [] 

while True: 
tcpServer.listen(4) 
print ("Multithreaded Python server : Waiting for connections from TCP clients...") 
(conn, (ip,port)) = tcpServer.accept() 
newthread = ClientThread(ip,port) 
newthread.start() 
threads.append(newthread) 

for t in threads: 
t.join() 

Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received data:  b''
Server received da

您的客户端线程似乎无限循环。它将愉快地继续(尝试(从关闭的连接中读取。您应该添加检查从读取接收的数据是否实际包含字节。否则,连接将关闭。

所以,之后

data = conn.recv(2048)

加:

if not data: break

最新更新