如何使用Python从多个客户端接收数据

2024-06-17 09:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个2人在线局域网游戏。我已经创建了服务器和客户端,它们可以连接。问题是,当两个客户机尝试发送信息时,服务器不会正确处理来自两个客户机的信息,但当只有一个客户机连接时,服务器会正确处理。 这是服务器代码:

import socket
import os

numOfClients = 0
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serversocket.bind(('192.168.88.1', 10000))
serversocket.listen(5)
while numOfClients != 2:
    if numOfClients == 0:
        c, a = serversocket.accept()
    elif numOfClients == 1:
        c1, a1 = serversocket.accept()
    if numOfClients == 0:
        print(a, 'has connected!')
    elif numOfClients == 1:
        print(a1, 'has connected!')
    numOfClients += 1
    print('Connected to ', a)
print("2 Players have connected!")
while True:
    msg1 = c.recv(1024)
    if msg1 != b'':
        print(msg1, '1')
    msg2 = c1.recv(1024)
    if msg2 != b'':
        print(msg2, '2')

以下是您真正需要的所有客户端代码:

# Socket Stuff
port = 10000
host = '192.168.88.1'
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = host, port
socket.connect(server)
socketMsg = b''

# Main Game loop
while True:
    # Calls Functions
    socket.send(socketMsg)
    # socketMsg is assigned above, it is assigned to b'Works!' just so that I can see if it actually works
    socketMsg = b''
    redrawWin()
    get_events()

如果我在这篇文章中做错了什么,我很抱歉,这是我在stack上的第二篇文章


Tags: 代码服务器客户端客户机ifsocket正确处理print
1条回答
网友
1楼 · 发布于 2024-06-17 09:34:55

您的第一个套接字连接阻止了以后的连接。有多种解决方案

  • 使用非阻塞模式select模块设计用于管理此功能
  • 使用多线程,这意味着每个客户端将有一个独立的线程
  • 使用asyncio

相关问题 更多 >