这一切都是超级新的。
创建了一个基本的 TCP 服务器和客户端,可以连接多个客户端,但是当我发送消息时,我在任何客户端上都看不到任何内容。当建立连接时,它会显示在服务器上以及他们的用户名。当有人连接时,它也会显示在客户端上。但是当输入消息时,任何客户端都不会收到消息。
以下是服务器的代码:
import socket
import threading
PORT = 5050
HOST = '127.0.0.1'
ADDR = (HOST, PORT)
FORMAT = 'ascii'
HEADER = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
server.listen()
clients = []
usernames = []
def broadcast(message):
for client in clients:
client.send(message)
def server_handle(client):
connected = True
while connected:
try:
message = client.recv(HEADER)
broadcast(message)
except:
index = clients.index(client)
clients.remove(client)
client.close()
username = usernames[index]
broadcast(f'{username} left the chat!'.encode(FORMAT))
usernames.remove(username)
break
def receive():
while True:
client, address = server.accept()
print(f'{str(address)} has connected')
client.send('USER'.encode(FORMAT))
username = client.recv(HEADER).decode(FORMAT)
usernames.append(username)
clients.append(client)
print(f'Username of the client is {username}')
client.send('Connected to the sever, welcome!'.encode(FORMAT))
broadcast(f'{username} has joined the chat, say hi!'.encode(FORMAT))
thread = threading.Thread(target= server_handle, args=(client,))
thread.start
print('[STARTING] server is starting...')
receive()
server_handle()
以下是客户端的代码:
import socket
import threading
PORT = 5050
HOST = '127.0.0.1'
ADDR = (HOST, PORT)
FORMAT = 'ascii'
HEADER = 1024
USERNAME = input('Type your username: ')
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(ADDR)
def receive():
connected = True
while connected:
try:
message = client.recv(HEADER).decode(FORMAT)
if message == 'USER':
client.send(USERNAME.encode(FORMAT))
pass
else:
print(message)
except:
print('ERROR!')
client.close
break
def write():
while True:
message = f'{USERNAME}: {input("")}'
client.send(message.encode(FORMAT))
receive_thread = threading.Thread(target=recieve)
receive_thread.start()
write_thread = threading.Thread(target=write)
write_thread.start()
不确定如何尝试修复它。