2015-06-09 29 views
0

這個想法是多播同一個內容從一個資源到多個接收者一次。我想出了下面的代碼:psuedo TCP組播與os.dup2()在python?

#!/usr/bin/env python 
# coding: utf8 

import socket, os 

c = socket.socket() 
c.connect(('127.1', 4343)) 

s = socket.socket() 
s.bind(('127.1', 8989)) 
s.listen(3) 
while 1: 
    conn, addr = s.accept() 
    print 'Connected by %s:%s' % addr 
    os.dup2(conn.fileno(), c.fileno(),) 
s.close() 

netcat測試,它沒有任何的成功,無論是client退出意外或server退出任何連接後。這可能嗎?我做錯了什麼?

回答

1

os.dup2()調用兩個文件描述符(FD)後,引用相同的套接字,從而共享其緩衝區。當使用原始FD提取數據(通過recv()read())時,此片段不能再使用複製的FD提取,反之亦然。傳入數據的每個八位組將被精確讀取一次,並由一個接收器讀取,但不會爲每個FD重複(這是您錯誤的地方,我想)。

對於可靠的多播解決方案,請參閱this answer和鏈接主題。

+0

找到另一個有用的鏈接http://stackoverflow.com/q/17590816/41948 – est