我需要客户端写入服务器端

问题描述

我正在尝试使客户端能够向服务器发送消息,现在客户端只能相互发送消息,我添加了一行 where datafromclient 但它只接收客户端的第一个输入,之后只有客户端交换消息。

这是我的 server.py 代码

import socket
import threading

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((socket.gethostname(),1234))
s.listen()
print("Waiting for connections")

clients = []
unames = []

def broadcast(message):
    for client in clients:
        client.send(message)

def handle(client):
    while True:
        try:
            message = client.recv(1024)
            broadcast(message)
        except:
            index = clients.index(client)
            clients.remove(client)
            client.close()
            uname = unames[index]
            broadcast(f"{uname} left the server!".encode("utf-8"))
            unames.remove(uname)
            break
def receive():
    while True:
        client,addr = s.accept()
        print(f"Connected with {str(addr)}")

        client.send('uname'.encode("utf-8"))
        uname = client.recv(1024).decode("utf-8")
        unames.append(uname)
        clients.append(client)

        broadcast(f"{uname} joined the server!".encode("utf-8"))
        client.send("\nWelcome to the server!".encode("utf-8"))
        fOpen = open("rules.txt","r")
        client.send(fOpen.read().encode("utf-8"))

        datafromclient = client.recv(1024)
        print(datafromclient.decode("utf-8"))

        thread = threading.Thread(target=handle,args=(client,))
        thread.start()
receive()
s.close()

这是 client.py

import socket
import threading

c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.connect((socket.gethostname(),1234))

uname = input("Username: ")

def receive():
    while True:
        try:
            message = c.recv(1024).decode("utf-8")
            if message == "uname":
                c.send(uname.encode("utf-8"))
            else:
                print(message)
        except:
            print("An error occurred!")
            c.close()
            break

def write():
    while True:
        message = f'{uname}: {input("")}'
        c.sendall(message.encode("utf-8"))

recv_thread = threading.Thread(target=receive)
recv_thread.start()

write_thread = threading.Thread(target=write)
write_thread.start()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)