Ich versuche, einen kleinen Chat-Server/Client mit Python zu bauen. Bisher habe ich es geschafft, es einzurichten, aber ich stoße auf Probleme. Ich wollte das Programm so einrichten, dass es Multithread-fähig ist, damit der Server nach Verbindungen lauscht und auch weiterhin auf Daten wartet und dann die Hauptprogrammschleife im Client bleibt. Hier ist mein Code, und ich stoße auf ein Problem, wenn ich die listen Funktion starte, es sagt mir, dass das Argument ein nicht iterabler Socket sein muss.Chat-Programm Threaded
import socket
import platform
import os
import threading
'''Define Globals'''
HOST = ""
PORT = 25000
ADDR = (HOST, PORT)
BUF = 1024
def client_send():
server_ip = input("[+] Server's IP to connect to: ")
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_ip, 25000))
data_thread = threading.Thread(target=client_listen, args=(client_socket))
data_thread.start()
while True:
data = input("[%s] => " % os.getlogin())
client.send(str.encode("[%s] => " + data % os.getlogin()))
def client_listen(client):
while True:
print(client.recv(BUF))
def server_loop():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
server.listen(10)
print("[+] Server started on %s" %platform.node())
print("[+] Awaitiing connection from client..")
while True:
client_socket, client_addr = server.accept()
print("[+] New Connection from %s" %client_addr[0])
def main():
server_thread = threading.Thread(target=server_loop)
while True:
try:
print("Select Operating Mode")
print("---------------------")
print("1. Server Mode")
print("2. Client Mode")
mode = int(input("Enter mode of operation: "))
print("")
print("")
if mode in [1,2]:
break
else:
raise ValueError
except ValueError:
print("Enter either (1) for Server or (2) for Client")
if mode == 1:
server_thread.start()
elif mode == 2:
client_send()
main()
Beitrag der Zurückverfolgungs Ihrer Fehler Bitte – nlsdfnbch