我不太确定我完全理解你的问题,但这里是我刚写的一个echo服务器的数据报实现。您可以看到服务器正在响应客户端发送的相同IP/PORT。
下面的代码
首先,服务器(监听)
from socket import *
import time
class Listener:
def __init__(self, port):
self.port = port
self.buffer = 102400
def listen(self):
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(('', self.port))
while 1:
data, addr = sock.recvfrom(self.buffer)
print "Received: " + data
print "sending to %s" % addr[0]
print "sending data %s" % data
time.sleep(0.25)
#print addr # will tell you what IP address the request came from and port
sock.sendto(data, (addr[0], addr[1]))
print "sent"
sock.close()
if __name__ == "__main__":
l = Listener(1975)
l.listen()
而现在,客户端(发送器)接收来自监听
from socket import *
from time import sleep
class Sender:
def __init__(self, server):
self.port = 1975
self.server = server
self.buffer = 102400
def sendPacket(self, packet):
sock = socket(AF_INET, SOCK_DGRAM)
sock.settimeout(10.75)
sock.sendto(packet, (self.server, int(self.port)))
while 1:
print "waiting for response"
data, addr = sock.recvfrom(self.buffer)
sock.close()
return data
if __name__ == "__main__":
s = Sender("127.0.0.1")
response = s.sendPacket("Hello, world!")
print response
伟大的分析,罗布!非常感谢! 似乎有不同来源的manpages:在工作(一些旧的SuSE),他们明确地限制自动绑定连接效果流套接字。在家里,我有和你一样的句子。 从长远来看,我会记住这是绑定到一个空路径。 – 2008-09-20 13:52:25