在服务器和客户端的 python TCP 聊天室上不接收消息

问题描述 投票:0回答:0

这一切都是超级新的。

创建了一个基本的 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()

不确定如何尝试修复它。

python tcpclient tcpserver
© www.soinside.com 2019 - 2024. All rights reserved.