我有一个非常标准的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并成功将消息发送到服务器?或者我错过了插座的东西?
答案 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