Comment puis-je avoir plusieurs clients sur un réseau TCP Python Serveur de Chat?
Toute aide sur comment je peux obtenir ce à accepter plus d'un client, et pourquoi il n'est pas à l'heure actuelle? Merci!
Aussi, est-ce que je fais mal avec ce code? J'ai suivi la plupart Python 2 tutoriels parce que je ne peux pas trouver tout pour Python 3.4
Voici mon code Serveur:
import socket
import time
import os
from threading import Thread
folderPath = "Chat Logs"
filePath = folderPath + "/" + str(time.strftime("%H-%M-%S_%d-%m-%Y")) + ".txt"
def clientHandler(c):
while True:
data = c.recv(1024)
if not data:
break
data = data.decode("UTF-8")
message = str(data[:data.index("§")])
nick = str(data[data.index("§")+1:])
print(nick + ": " + message)
saveChat(nick, message)
print(" Sending: " + data)
c.send(bytes(data, "UTF-8"))
c.close()
def saveChat(nick, message):
if not os.path.exists(folderPath):
os.makedirs(folderPath)
if not os.path.exists(filePath):
f = open(filePath, "a")
f.close()
f = open(filePath, "a")
f.write(nick + ": " + message + "\n")
f.close()
def Main():
host = str(socket.gethostbyname(socket.gethostname()))
port = 5000
print(host + ":" + str(port) + "\n")
Clients = int(input("Clients: "))
s = socket.socket()
s.bind((host, port))
s.listen(Clients)
for i in range(Clients):
c, addr = s.accept()
print("Connection from: " + str(addr))
Thread(target=clientHandler(c)).start()
s.close()
if __name__ == "__main__":
Main()
Et voici mon code Client:
import socket
def Main():
print("Send 'q' to exit\n")
address = str(input("ip:port -> "))
nick = input("nick: ")
try:
if address.index(":") != 0:
host = address[:address.index(":")]
port = int(address[address.index(":")+1:])
except ValueError:
host = address
port = 5000
s = socket.socket()
s.connect((host, port))
message = input("-> ")
while message != "q":
s.send(bytes(message + "ยง" + nick, "UTF-8"))
data = s.recv(1024)
data = data.decode("UTF-8")
data2 = data
messageServer = str(data[:data.index("ยง")])
nickServer = str(data[data.index("ยง")+1:])
if not data == data2:
print(nickServer + ": " + messageServer)
message = input("-> ")
s.close()
if __name__ == "__main__":
Main()
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, j'ai trouvé ces tutoriels très utiles: BinaryTides
Voici un exemple d'un simple serveur tcp qui accepte plusieurs clients. Tout cela fait de recevoir des données du client et de retour "OK .." + the_data. Cependant, vous pouvez facilement le modifier pour avoir une fonction qui diffuse les données(chat msg) à tous les clients connectés. Cet exemple utilise le filetage. Vous devriez google pour la
select
module. En ce qui concerne votre fils, êtes-vous sûr que vous êtes un) en utilisant le droit de module/méthode de travail et b) que vous appelez dans le droit chemin?ImportError: No module named 'thread'
lors de la tentative d'importation pourstart_new_thread
Découvrez: http://etutorials.org/Programming/Python+tutorial/Part+IV+Network+and+Web+Programming/Chapter+19.+Sockets+and+Server-Side+Network+Protocol+Modules/19.3+Event-Driven+Socket+Programs/ . Exemple 19-6 est (l'un avec le
select
appel système) comme un bonjour à tout le monde d'applications de chat. Vous pouvez également jeter un oeil à http://beej.us/guide/bgnet/output/html/multipage/index.html pour de plus bas niveau (C) aperçu du système de principes de base des réseaux.