我不太確定我完全理解你的問題,但這裏是我剛寫的一個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