2016-08-31 2 views
1

Ich lerne etwas Networking durch Python und kam mit dieser Idee von TCPServer Multithread, so dass ich mehrere Clients verbunden haben kann. Das Problem ist, dass ich nur einen Client verbinden kann.TCP-Threaded Python

import socket 
import os 
import threading 
from time import sleep 
from threading import Thread 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print('Socket Preparado...') 

def Main(): 
host = '127.0.0.1' 
port = 5000 

s.bind((host, port)) 
print('Enlaze listo...') 

print('Escuchando...') 
s.listen(5) 
c, addr, = s.accept() 
os.system('cls') 

print('Conexion desde: '+str(addr)) 

def handle_client(client_socket): 
while True: 
    data = client_socket.recv(1024).decode('utf-8') 
    if not data: break 
    print('Client says: ' + data) 
    print('Sending: ' + data) 
    client_socket.send(data.encode('utf-8')) 
client_socket.close() 

if __name__ == '__main__': 
while True: 
    Main() 
    client_socket, addr = s.accept() 
    os.system('cls') 
    print('Conexion desde: '+str(addr)) 
    Thread.start_new_thread(handle_client ,(client_socket,)) 
s.close() 

Edit: Das ist mein eigentlicher Code, um es zu testen i zwei Client.py Codes öffnen und versuchen, es zu verbinden. Die erste Client.py verbindet erfolgreich (Obwohl es Fehler beim Empfangen und Zurücksenden von Informationen gibt) Die zweite wird ausgeführt, aber sie wird nicht in der Serverausgabe als verbunden oder so angezeigt, sie wird nur kompiliert und bleibt so.

Antwort

0

Ok bekommen zu erstellen, hier ist der Code gelöst, sollte ich gesagt habe ich auf Python3 Version arbeitete. Ich lese die Dokumente, die ich herausgefunden habe, hier ist der Code und unter den Dokumenten.

import socket 
import os 
import threading 
from time import sleep 
from threading import Thread 
import _thread 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print('Socket Preparado...') 

def Main(): 
host = '127.0.0.1' 
port = 5000 

s.bind((host, port)) 
print('Enlaze listo...') 

print('Escuchando...') 
s.listen(1) 





def handle_client(client_socket): 
while True: 
    data = client_socket.recv(1024).decode('utf-8') 
    if not data: break 
    print('Client says: ' + data) 
    print('Sending: ' + data) 
    client_socket.send(data.encode('utf-8')) 
client_socket.close() 

if __name__ == '__main__': 
Main() 
while True: 

    client_socket, addr = s.accept() 
    os.system('cls') 
    print('Conexion desde: '+str(addr))   
    _thread.start_new_thread(handle_client ,(client_socket,)) 
s.close() 

https://docs.python.org/3/library/threading.html http://www.tutorialspoint.com/python3/python_multithreading.htm

Das Problem war bei _thread.start_new_thread(handle_client ,(client_socket,))import _thread gerade hier ein paar Fragen stellen, halten die Erforschung und bekam sie.

Danke euch allen.

WhiteGlove

1

Sie benötigen einen neuen Thread jedes Mal, wenn eine neue Verbindung

import socket 
import thread 

host = '127.0.0.1' 
port = 5000 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print('Socket Ready...') 

s.bind((host, port)) 
print('Bind Ready...') 

print('Listening...') 
s.listen(1) 

def handle_client(client_socket): 
    while True: 
     data = client_socket.recv(1024) 
     if not data: break 
     print('Client says: ' + data) 
     print('Sending: ' + data) 
     client_socket.send(data) 
    client_socket.close() 

while True: 
    client_socket, addr = s.accept() 
    print('Conexion from: '+str(addr)) 
    thread.start_new_thread(handle_client ,(client_socket,)) 
s.close() 
+0

mit 's.listen (1)'? – dsgdfg

+0

https://docs.python.org/3.5/library/socket.html#socket.socket.listen –

+0

Wenn ich aus der Dokumentation gut verstanden, ist es die Anzahl der möglichen Verbindungen? Ich habe die Nummer auf 2 geändert und kann immer noch nicht mehr als 1 mit dem Server verbinden. – WhiteGlove