Как я могу иметь несколько клиентов на TCP Python Chat Server?

Любая помощь в том, как я могу заставить это принять более одного клиента, и почему это не сейчас? Благодаря!

Кроме того, есть ли что-то, что я делаю неправильно с этим кодом? Я занимаюсь главным образом учебниками Python 2, потому что я не могу найти их для Python 3.4

Вот мой код сервера:

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() 

И вот мой код клиента:

 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() 

2 Solutions collect form web for “Как я могу иметь несколько клиентов на TCP Python Chat Server?”

Прежде всего, я нашел эти руководства очень полезными: BinaryTides

Ниже приведен пример простого tcp-сервера, который принимает несколько клиентов. Все это получает данные от клиента и возвращает «OK ..» + the_data. Однако вы можете легко изменить его, чтобы иметь функцию, которая передает данные (chat msg) всем подключенным клиентам. В этом примере используется потоковая обработка. Вы должны google для select модуля. Что касается ваших потоков, вы уверены, что: a) используя правильный модуль / метод для задания и b) что вы вызываете его правильно?

 import socket import sys from thread import start_new_thread HOST = '' # all availabe interfaces PORT = 9999 # arbitrary non privileged port try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, msg: print("Could not create socket. Error Code: ", str(msg[0]), "Error: ", msg[1]) sys.exit(0) print("[-] Socket Created") # bind socket try: s.bind((HOST, PORT)) print("[-] Socket Bound to port " + str(PORT)) except socket.error, msg: print("Bind Failed. Error Code: {} Error: {}".format(str(msg[0]), msg[1])) sys.exit() s.listen(10) print("Listening...") # The code below is what you're looking for ############ def client_thread(conn): conn.send("Welcome to the Server. Type messages and press enter to send.\n") while True: data = conn.recv(1024) if not data: break reply = "OK . . " + data conn.sendall(reply) conn.close() while True: # blocking call, waits to accept a connection conn, addr = s.accept() print("[-] Connected to " + addr[0] + ":" + str(addr[1])) start_new_thread(client_thread, (conn,)) s.close() 

Отъезд: 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 / . Пример 19-6 (тот, у кого есть системный вызов), как мир приветствий чат-приложений. Вы также можете взглянуть на http://beej.us/guide/bgnet/output/html/multipage/index.html для более глубоких сетевых интерфейсов системы определения уровня ниже.

  • Сокеты TCP Python не работают должным образом
  • Portscanner не работает должным образом, возможно, семантическая ошибка
  • Python Queue.Queue не будет работать в поточном обработчике потока TCP
  • Python socket.accept неблокируется?
  • открыть открытый TCP-порт в Python
  • Python / Twisted - фрагментация пакетов TCP?
  • роботизированный имитатор запястий - Kinect как датчик (закодированный на Python) для моделирования в Labview с использованием TCP
  • Проблемы с перфорацией отверстий TCP
  • Python - лучший язык программирования в мире.