在python中将UDP从一台计算机发送到另一台计算机

时间:2017-04-02 11:06:58

标签: python sockets udp

我有一个非常标准的udp数据包简单演示,但是在尝试发送到另一个IP地址时出错,我真的不明白为什么。

  

socketerror:[Errno 22]参数无效

我认为可行的代码基本上就是......

服务器

def Main():
    host = '0.0.0.0'
    port = 20030

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host,port))

    #Then it prints incoming data and sends it back to client.
    data,addr = s.recvfrom(1024)
    s.close()

客户端

def Main():
    host = '127.0.0.1'
    port = 20020

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host,port))
    server = ('10.20.64.115', 20030)

    #loop for input to send to server.
    s.sendto(message, server)
    s.close()

如果我在同一台计算机上运行它们并且两者都运行host = 127.0.0.1,则两者都绑定到127.0.0.1并且s.sendto(消息,服务器)发送到127.0.0.1它们可以发回消息并且没有问题。

如果我在不同的计算机上运行它们,我相信我应该使用客户端发送到服务器IP地址的IP地址,但我得到[Errno 22]。

所以我尝试将客户端绑定到192.0.0.1,这给了[Errno 99]无法分配请求的地址。

我尝试将客户端绑定到0.0.0.0,将sendto地址绑定到10.20.64.115,但客户端只返回到新行,服务器看不到任何内容。

所有教程都说要绑定并发送到127.0.0.1,所以我将两台计算机设置为该计算机并且它也不会显示在服务器中。

所以我现在都很困惑。纠正任何误解......

bind(你要收听的IP地址,你想听的端口)

sendto(要发送的消息,IP地址,要发送到的端口)

0.0.0.0正在听一切。

192.0.0.1正在侦听路由器。

127.0.0.1正在收听计算机。

如果是这样,我需要发送什么IP地址以避免错误22并成功将消息发送到服务器?或者我错过了插座的东西?

1 个答案:

答案 0 :(得分:-1)

  

bind(你要收听的IP地址,你想听的端口)

在发送UDP数据包时,在客户端,不需要testpage = urlopen('http://tools.morningstar.co.uk/uk/fundscreener/results.aspx?LanguageId=en-GB&Universe=FOGBR%24%24ALL&CurrencyId=GBP&URLKey=t92wz0sj7c&Site=uk&tabAction=Portfolio') 将其套接字附加到地址,您可以直接使用bind()sendto()发送和接收消息从服务器。有关详细信息,请参阅here