14/07/16 11:05
macco_cl
Ciao a tutti, da poco ho iniziato a lavorare sulla programmazione Multi Thread perché ne ho necessità per un progetto che sto sviluppando, per adesso sto ancora cercando di imparare le basi della programmazione legate a questo argomento per poi cercare di applicarle al mio progetto.
Attualmente sto lavorando sui seguenti Script che ho trovato in rete e leggermente modificato.
Quello che vorrei è un Serve sempre in ascolto che possa stampare le informazioni che gli vengono inviate da N client (in questo momento 2) solo che il programma funziona perfettamente con un solo client, nel momento in cui lancio un secondo client, per un attimo i due client funzionano bene poi il primo client va in crash con questo errore:
socket.error: [Errno 32] Broken pipe
Mi potreste dare chiarimenti sul perché ottengo questo errore e in che modo posso evitarlo?
Grazie mille per il vostro aiuto
Di seguito il codice:
Server Script:
Client Script (metto solo 1 client perché ovviamente il codice è lo stesso anche per l'altro)
Attualmente sto lavorando sui seguenti Script che ho trovato in rete e leggermente modificato.
Quello che vorrei è un Serve sempre in ascolto che possa stampare le informazioni che gli vengono inviate da N client (in questo momento 2) solo che il programma funziona perfettamente con un solo client, nel momento in cui lancio un secondo client, per un attimo i due client funzionano bene poi il primo client va in crash con questo errore:
socket.error: [Errno 32] Broken pipe
Mi potreste dare chiarimenti sul perché ottengo questo errore e in che modo posso evitarlo?
Grazie mille per il vostro aiuto
Di seguito il codice:
Server Script:
import socket from threading import Thread import time 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) if data: print "Server received data:", data else: print "NO Data" #MESSAGE = raw_input("Multithreaded Python server : Enter Response from Server/Enter exit:") #if MESSAGE == 'exit': #break #conn.send(MESSAGE) # echo # Multithreaded Python server : TCP Server Socket Program Stub TCP_IP = '0.0.0.0' TCP_PORT = 2004 BUFFER_SIZE = 20 # 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()
Client Script (metto solo 1 client perché ovviamente il codice è lo stesso anche per l'altro)
# Python TCP Client A import socket import time host = socket.gethostname() port = 2004 BUFFER_SIZE = 2000 #MESSAGE = raw_input("tcpClientA: Enter message/ Enter exit:") tcpClientA = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpClientA.connect((host, port)) #while MESSAGE != 'exit': while True: tcpClientA.send("Client 1") time.sleep(2) #data = tcpClientA.recv(BUFFER_SIZE) #print " Client2 received data:", data #MESSAGE = raw_input("tcpClientA: Enter message to continue/ Enter exit:") #tcpClientA.sent("exit") tcpClientA.close()
aaa