创建TCP聊天室并在线程中出错



使用套接字和线程创建TCP聊天室,但在线程中出错
客户端是本地客户端和使用其他设备的另一个客户端
服务器日志出现错误

服务器端有一个handle函数,它给出了一个错误,应该有可迭代的not socket,所以我该如何解决它。服务器端:

# Sending Messages To All Connected Clients
def broadcast(message):
for client in clients:
client.send(message)
# Handling Messages From Clients
def handle(client):
while True:
try:
# Broadcasting Messages
message = client.recv(1024)
broadcast(message)
except:
# Removing And Closing Clients
index = clients.index(client)
clients.remove(client)
client.close()
nickname = nicknames[index]
broadcast('{} left!'.format(nickname).encode('ascii'))
nicknames.remove(nickname)
break
# Receiving / Listening Function
def receive():
while True:
# Accept Connection
client, address = server.accept()
print("Connected with {}".format(str(address)))
# Request And Store Nickname
client.send('NICK_NAME'.encode('ascii'))
nickname = client.recv(1024).decode('ascii')
nicknames.append(nickname)
clients.append(client)
# Print And Broadcast Nickname
print("Nickname is {}".format(nickname))
broadcast("{} joined!".format(nickname).encode('ascii'))
client.send('Connected to server!'.encode('ascii'))
# Start Handling Thread For Client
thread = threading.Thread(target=handle, args=(client))
thread.start()
receive()
input('Press Enter to Close the Server.')

客户端:

# Listening to Server and Sending Nickname
def receive():
while True:
try:
# Receive Message From Server
# If 'NICK_NAME' Send Nickname
message = client.recv(1024).decode('ascii')
if message == 'NICK_NAME':
client.send(nickname.encode('ascii'))
else:
print(message)
except:
# Close Connection When Error
print("An error occured!")
client.close()
break
# Sending Messages To Server
def write():
while True:
message = '{}: {}'.format(nickname, input(''))
client.send(message.encode('ascii'))
# Starting Threads For Listening And Writing
receive_thread = threading.Thread(target=receive)
receive_thread.start()
write_thread = threading.Thread(target=write)
write_thread.start()

连接到服务器端的服务器时出现以下错误:

Exception in thread Thread-1:
Traceback (most recent call last):
File "C:UsersAnil soniAppDataLocalProgramsPythonPython38-32libthreading.py", line 932, in _bootstrap_inner
self.run()
File "C:UsersAnil soniAppDataLocalProgramsPythonPython38-32libthreading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: handle() argument after * must be an iterable, not socket

使用python 3.8.5和VS代码
感谢

在参数中添加,成功!!!

thread = threading.Thread(target=handle, args=(client,))

最新更新