当前位置: 首页 > 知识库问答 >
问题:

Python-不允许发送或接收数据的请求,因为套接字未连接

慕容铭
2023-03-14

我正在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')行出现错误。

共有1个答案

尉迟宪
2023-03-14

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

当服务器接受一个新的客户端(conn, addr=server.accept())时,它返回一个新的套接字,表示您与客户端通信的通道。与此客户端的所有进一步通信都是通过在conn上读写来进行的。您不应该在服务器套接字上调用recv()sendall()

代码应该如下所示:

# 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)
 类似资料:
  • 我正在尝试使用WCF代码中的TCP套接字连接到远程外部服务器我的WCF服务是一个客户端,它的代码使用套接字连接到外部服务器。此代码向外部服务器发送请求并接收服务器响应 如果我使用相同的客户端代码创建一个windows应用程序以连接到远程服务器,则成功。我能够连接、发送和接收此错误仅在我将WCF带入图片时发生。代码在if(m_socket失败。连接)。因此无法成功连接。 非常感谢。

  • 我想发送一个字符串从客户端到即服务器。但是我发现了这个错误。请引导我! 不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址 客户端 服务器 我被卡住了! 编辑1学分:j4ck 服务器将要关闭。如何使此服务器对所有请求都处于活动状态?我想使用套接字从发送请求。我想,一旦请求到达服务器,服务器应该使类的线程而不是函数。

  • 我正在尝试使用套接字库在python中创建一个控制台聊天应用程序。 每当我向服务器发送消息时,服务器代码就会崩溃,并显示以下消息: OSError:[WinError 10057]不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址 服务器代码 客户端代码 我试图实现的是,每当我向服务器发送消息时,客户端脚本都应该打印发送的消息。我该怎么解决这

  • 完整错误代码: 我创建了SSL套接字服务器和客户端,但然后服务器尝试从客户端接收信息,它失败了,打印错误,这是上面的文本。 服务器: 客户:

  • 因此,我试图发送一个数据包,但我不断得到这个错误 任何帮助将是真棒! 谢谢! 错误消息:不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址 代码: }

  • 我试图将文件从客户端传输到服务器。但由于错误,我没有收到任何文件。 这是我的server.py文件,但我得到这个错误,当我要从客户端接收文件。 这是我的客户。请看下面。但这并没有出现错误。 这是我的服务器错误。派克