我的服务器Python 套接字有什么问题?

问题描述

我开始了一个旨在通过套接字进行多人井字游戏的项目。在这个项目的第一步中,我对服务器和客户端进行了编码,以便玩家可以连接到服务器。但由于某种原因,服务器只接受一个连接。

因此,如果我打开服务器并连接一个客户端,服务器将执行我编程的操作,但是如果我按顺序连接其他客户端,则服务器什么也不做。看来服务器只应用我为第一次连接所做的。

我真的不知道这个问题的根源。

有我的client.py:

import socket
import time

class Client(object):

    def __init__(self,ip="192.168.0.15",port=5000):
        self.ip = ip
        self.port = port
        self.address = (self.ip,self.port)

    def start(self):
        self.client_manager()

    def client_manager(self):
        client_socket = self.connect_to_server()

        try:
            client_username = str(input(">> Enter your username: "))
            client_socket.send(client_username.encode("UTF-8"))
            print("You're welcome,{}! You've connected successfully to server.".format(client_username))
            players_quantity = int(client_socket.recv(1024).decode("UTF-8"))
            
            while players_quantity == 1:
                self.check_players_quantity(players_quantity,client_socket)
                time.sleep(2)
        except:
            print("An error ocurred on client.")

    def check_players_quantity(self,players_quantity,client_socket):
        if players_quantity == 1:
            print("You've connected to server. One player remaining,please wait...")
        elif players_quantity == 2:
            print("You've connected to server. All two players are ready,waiting for server...")
            client_socket.send("READY".encode("UTF-8"))

    def connect_to_server(self):
        client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        client_socket.connect(self.address)
        
        return client_socket

if __name__ == "__main__":
    client = Client()
    client.start()

还有我的 server.py:

import socket
import threading

class Server(object):

    def __init__(self,self.port)
        self.clients_list = []
        self.users_list = []

    def start(self):
        self.receive_connection()

    def server_manager(self,client_socket):
        client_username = client_socket.recv(1024).decode("UTF-8")
        self.users_list.append(client_username)
        print("{} has connected to server.".format(client_username))

        players_quantity = str(len(self.clients_list))
        client_socket.send(players_quantity.encode("UTF-8"))

        received_data = client_socket.recv(1024).decode("UTF-8")

        if received_data == "READY":
            print("All two players are ready. Type 'start' to start the game.")
            data = str(input(">> "))

    def receive_connection(self):
        server_socket = self.initiliaze_socket()

        try:
            while True:
                client_socket,address = server_socket.accept()
                self.clients_list.append(client_socket)
                print("Connection received from '{}:{}'.".format(address[0],address[1]))
                self.server_manager(client_socket)
        except:
            print("An error ocurred on server!")

    def initiliaze_socket(self):
        server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        server_socket.bind(self.address)
        server_socket.listen()

        print("Server is running on '{}:{}'. Waiting for connections.".format(self.address[0],self.address[1]))

        return server_socket

if __name__ == "__main__":
    server = Server()
    server.start()

Screenshot when I turn on the server:

Screenshot when the first client connects to server

Screenshot when the second client connects to server

解决方法

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

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

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