【问题标题】:Errno 61 connection refused for UDP client server applicationUDP 客户端服务器应用程序的 Errno 61 连接被拒绝
【发布时间】:2015-04-28 20:10:15
【问题描述】:

我们正在尝试运行一个简单的 UDP 客户端服务器应用程序。

UDPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort))
print "The server is ready to receive"
while 1:
    message, clientAddress = serverSocket.recvfrom(2048)
    modifiedMessage = message.upper()
    serverSocket.sendto(modifiedMessage, clientAddress)

UDPClient.py

from socket import *
serverName = 'servername'
serverPort = 12000
clientSocket = socket(socket.AF_INET, socket.SOCK_DGRAM)
message = raw_input('Input lowercase sentence:')
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage = clientSocket.recvfrom(1024)
print modifiedMessage
clientSocket.close()

服务器先运行,但是客户端报错'Errno 61 connection denied',为什么?

【问题讨论】:

  • 客户端和服务器防火墙都关闭
  • 和 'servername' 确实是服务器的 IP 地址,我刚刚为这个问题删除了它
  • 我在我的机器上尝试了代码并且它正在工作(使用 127.0.0.1 作为 serverName)。可能IP地址不正确?您能否提供有关您的网络设置的更多详细信息?

标签: python udp


【解决方案1】:

如果在同一台机器上运行这两个程序,请将客户端 serverName 更改为 serverName = 'localhost'。如果在两台不同的机器上,serverName应该是服务器的IP地址,并关闭防火墙。

【讨论】:

    【解决方案2】:

    我尝试了这个示例,但我必须在客户端中更改这两行才能使其运行(然后它似乎在网络上运行良好):

    import socket
    clientSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    

    但是,我看到 UDP 连接出现“Errno 61 连接被拒绝” - 这通常表明已收到 ICMP 目标不可达响应以回复发送到服务器上未绑定端口的数据包。但这只会导致带有调用connect((server,port))的套接字的Errno 61,然后它已被用于send()初始数据包,随后(有足够的延迟以接收ICMP数据包)调用recv() - 引发包含 Errno 61 的异常(请参阅此 answer 了解如何捕获它)。

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2019-08-07
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多