gpt4 book ai didi

Python - 由于套接字未连接,发送或接收数据的请求被禁止

转载 作者:行者123 更新时间:2023-11-30 22:22:52 25 4
gpt4 key购买 nike

我正在 Pygame 中创建一个游戏,需要多人游戏的客户端-服务器部分。

首先,我检查连接是否少于两个。如果是这种情况,客户端将看到一个屏幕,显示“正在等待连接”。

我已经让客户端成功向服务器发送“1”消息,如果服务器未满,服务器将响应“1”。因此,如果服务器未响应 1,则服务器已满,客户端可以继续。

但是,我收到标题中提到的此错误。

服务器代码:

import socket
import sys
import threading
from _thread import *
import time

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host=socket.gethostname()
ip=socket.gethostbyname(host)
port=8000

connections=[]

print('Your local ip address is',ip)

s.bind((host,port))
s.listen(2)

def threaded_client(connection):

while True:
data=connection.recv(2048) #anything we receive
if not data:
break

connection.close()


def checkconnected(connections):
noofconn=len(connections)



while True:

print('Waiting for a connection...')
connection,address=s.accept()
print(address,'has connected to server hosted at port',address[1])
connections.append(address)



data=connection.recv(1024)

received=[]
counter=0

for letter in data:
received.append(data[counter])
counter+=1

received=(chr(received[0]))

if received=='1':#handling initial connections
if len(connections)!=2:
s.sendall(b'1')

if not data:
break


start_new_thread(threaded_client,(connection,))


s.close()

调用它的客户端代码:

host=socket.gethostname()
ip=socket.gethostbyname(host)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
address=address
port=8000

if address==ip:
ishost=True

else:
ishost=False

try:
s.connect((address,port))
connectionwaitingmenu()
connected=False

while connected==False:
s.sendall(b'1')
data=s.recv(1024)
received=[]
counter=0

for letter in data:
received.append(data[counter])
counter+=1

received=(chr(received[0]))

if received=='1':
connected=False
elif received!='1':
connected=True
classselection()

错误发生在服务器代码中的 s.sendall(b'1') 行。

最佳答案

您的代码中还有一些其他问题,但标题中错误的原因是您在服务器端使用了错误的套接字发送和接收数据。

当服务器接受新客户端(conn, addr = server.accept())时,这会返回一个新套接字,它代表您与之通信的 channel 客户端。与该客户端的所有进一步通信都是通过读取和写入 conn 来进行的。您不应该在 s(即服务器套接字)上调用 recv()sendall()。/p>

代码应如下所示:

# Assuming server is a bound/listening socket
conn, addr = server.accept()

# Send to client
conn.sendall(b'hello client')

# Receive from client
response = conn.recv(1024)

# NO
server.send(b'I am not connected')
this_wont_work = server.recv(1024)

关于Python - 由于套接字未连接,发送或接收数据的请求被禁止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48198107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com