Python 服务器-客户端消息传递

Python Server-Client Messaging

提问人:Daniel Bruton 提问时间:11/16/2023 最后编辑:JonasDaniel Bruton 更新时间:11/20/2023 访问量:9

问:

我正在尝试使用 Python 套接字来构建服务器-客户端聊天系统。我遇到的问题是,在机器本身发送消息之前,不会显示任何消息,然后显示它收到的所有消息。我知道这段代码中还有其他问题,并且绝对欢迎其他指针,但我主要专注于找到一种方法来修复此错误,因为我根本没有运气。 我的代码如下。

服务器:

import socket
from threading import *

HOSTNAME = socket.gethostname()
HOST = socket.gethostbyname(HOSTNAME)
PORT = 4141
clients = []
client_num = 0
PORTS_ARRAY = [4141,4142]

print(f"Server {HOST} online")




class Connection():

    def __init__(self):
        self.sock = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
        self.port = PORTS_ARRAY[0]
        PORTS_ARRAY.pop(0)
        print(f"[.] Binding server listener to port {self.port}...")
        self.sock.bind((HOST , self.port))
        print("[.] Listener bind successful! Starting listener service...")
        self.sock.listen()
        self.client = ""
        self.address = ""
        
        while not self.client and not self.address:
            self.client,self.address = self.sock.accept()

        print(f"[+] Client {self.address[0]}:str({self.address[1]}) has connected to server")
        self.client.send(f"[+] Connection request accepted by server {HOST}".encode("utf-8"))
        clients.append([self.address[0],self.address[1]])

    def close_connection(self):

        try:
            self.sock.shutdown(socket.SHUT_RDWR)
            self.sock.close()
        except:
            print(f"[-] Client {self.address} has disconnected")
        PORTS_ARRAY.append(self.port)

    def message_client(self, message):
        self.client.send(f"Message from server {HOST} : {message}".encode("utf-8"))

    def port_listen(self):
                
        while True:
            server_message = input()
            if server_message:
                self.message_client(server_message.encode("utf-8"))
            try:
                message = self.client.recv(4096).decode("utf-8")
            except:
                self.close_connection()

            if message == "/BYE":
                self.close_connection()
                break

            elif message == "/ONLINE":
                print(clients)

            else:
                print(f"[IN] Message from client {self.address[0]}:{self.address[1]}  :  {message}")



client_one = Connection()
c1_listener = Thread(target=client_one.port_listen, daemon=True)
c1_listener.start()

client_two = Connection()
c2_listener = Thread(target=client_two.port_listen, daemon=True)
c2_listener.start()

while True:
    message = input()
    for user in [client_one, client_two]:
        user.message_client(message)

客户

import socket
from threading import *
import time

SERVER = input("Server IP address: ")
CLIENT_NAME = socket.gethostname()
CLIENT = socket.gethostbyname(CLIENT_NAME)

s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.connect((SERVER , 4141))


def listener():
    while True:
        message = s.recv(4096)
        print(f"[IN] Server: {s.recv(4096).decode('utf-8')}")
        message = "";
        


# server confirmation message
print(s.recv(4096).decode("utf-8"))


listener_daemon = Thread(target=listener, daemon=True)
listener_daemon.start()

try:
    while True:
        message = input("You: ")
        s.send(message.encode("utf-8"))

        if message == "/BYE":
            s.shutdown(socket.SHUT_RDWR)
            s.close()
            print(f"[-] Connection with {SERVER} closed by user")
            break
except:
        print("Error")

就像我说的,我已经尝试调试它。我假设它陷入了 while 循环,但我在找到循环和解决问题时遇到了麻烦。提前致谢:)

网络编程 客户端-服务器 python-sockets 逻辑错误

评论


答: 暂无答案