为什么我无法通过UDP套接字发送数据,当我将其绑定到例如127.0.0.2,而不是127.0.0.1?接收似乎有效
这是我的接收端
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )
>>> sock.bind(("127.0.0.1", 6666))
>>> sock.recvfrom(1024)
('01', ('127.0.0.1', 7777))
这就是我发送数据的方式
>>> sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
>>> sock.bind(('127.0.0.1', 7777))
>>> sock.sendto(b'01',('127.0.0.1',6666))
2
现在如果发送我说像
>>> sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
>>> sock.bind(('127.0.0.2', 7777))
>>> sock.sendto(b'01',('127.0.0.1',6666))
2
接收端没有任何事情发生。 sendto返回2,就像.1地址一样,但没有任何东西只是到达接收端。为了使这更奇怪,如果我绑定/接收127.0.0.2/6666,它可以很好地接收数据。但是,如果我从127.0.0.2发送数据
,请不要这样做这是Python 2.7.5,我在Windows 7上运行它。我正在尝试构建MT环境,我可以在同一台计算机中模拟到多个IP地址的连接。我不知道这是一个python功能或窗口或用户错误...
答案 0 :(得分:0)
您需要再次运行sock.recvfrom(1024)
以从套接字缓冲区接收下一个1024字节数据。
然后您会在接收端看到(b'01', ('127.0.0.2', 7777))
。
告诉我它是否有效。
修改强>
Server.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )
sock.bind(("127.0.0.1", 6666))
while 1:
data = sock.recvfrom(1024)
print data
client.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import socket
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.bind(('127.0.0.1', 7777))
sock.sendto(b'01',('127.0.0.1',6666))
sock.close()
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.bind(('127.0.0.2', 7777))
sock.sendto(b'02',('127.0.0.1',6666))
sock.close()
我可以
('01', ('127.0.0.1', 7777))
('02', ('127.0.0.2', 7777))
这对你有用吗?