【问题标题】:Python Socket - [Errno 35] Resource temporarily unavailablePython Socket - [Errno 35] 资源暂时不可用
【发布时间】:2020-10-27 17:04:45
【问题描述】:

我遇到了发送函数没有从接收函数接收数据的问题。当发送方发送数据时,接收方接收到数据就好了。接收方然后向发送方发送确认,以表明它接收到的数据很好。但是,发送函数根本不接收来自接收者的数据。

这里是发送确认的接收函数。

serversocket.sendto(str.encode(sequence), server_address)

我在接收器中没有尝试异常,它不会抛出异常。 这是发件人方面的事情:

        time_sent = time.time()
        ack_recv = None
        try:
            curr_time = time.time()
            time_received = curr_time - time_sent
            while(time_received < timeout_timer):
                #clientsocket.setblocking(False)
                clientsocket.setblocking(0)
                try:
                    ack_recv = clientsocket.recv(1024)
                    print("rdt_send: ack_num received: ", ack_recv.decode('utf-8'))
                    if ack_recv != None or ack_recv != b'0':
                        break
                except socket.error as err:
                    print(err)
                    #ass
                curr_time = time.time()
                time_received = curr_time - time_sent   
        except Exception as err:
            print(err)

在发送方的尝试异常部分,它永远不会打印出来

print("rdt_send: ack_num received: ", ack_recv.decode('utf-8'))

它总是去异常。

timeout_timer 设置为 5。 关于如何解决这个问题的任何想法? 如果需要,这是我初始化客户端套接字(发送方)的方式

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

这是我如何初始化 serversocket(接收器)

serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', port)
serversocket.bind(server_address)

【问题讨论】:

    标签: python python-3.x macos sockets


    【解决方案1】:

    这是由于您的非阻塞套接字。如果数据不能立即可用,则会引发错误。稍后再试或在recv 之前使用select 以确保套接字已准备好接收,或者不要使用非阻塞套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2016-05-10
      相关资源
      最近更新 更多