2009-09-27 73 views
0

我試圖通過Firefox擴展建立點對點(UDP)通信。我有在命令行上運行的python程序。我使用它構建了一個xpcom組件。但令人驚訝的是,我只能通過它從命令行python程序接收消息。Wireshark -------源程序的端口:timbuktu-srv2?

我們嘗試以下(全部在本地主機上工作):

Firefox的XPCOM組件作爲發件人 - >Firefox的XPCOM組件作爲接收器 - 沒有

Python的命令行工作作爲發件人 - >firefox xpcom組件作爲接收器 - 工作

firefox xpcom comp onent發件人 - >Python的命令行接收器 - 沒有工作

Python的命令行作爲發件人 - >蟒蛇命令行接收器 - 曾爲

當我們觀察到的數據包使用Wireshark的我們得到了一些分歧 -

Firefox的XPCOM Python的命令行Firefox的XPCOM到Firefox XPCOM(其中沒有藉機d)具有數據包記錄如下

這種類型的數據包(源端口標記爲非數)

的Winsock(C++)

XPCOM分量產生

C#

...UDP Source port: timbuktu-srv2 Destination port: 30000 

python命令行到python命令行 AND Python命令行到X PCOM(其中沒有工作)有包記錄如下

... UDP Source port: 30000 Destination port: 30000 

我不很瞭解網絡,但記錄標記..Source port: timbuktu-srv2..未能到達目的地。

我一直在嘗試使用Python,C++(Winsock的),C#P2P通信,但只能用我所觀察到的Python唯一不同的成功是這樣的類型與Python特定記錄的..

可以將某些網絡大師閃光超過它 ?

回答

0

您看到的timbuktu-srv2只是Wireshark查找實際端口號與已知服務列表的結果。如果您檢查IANA assigned port numbers list,你會看到此項:

timbuktu-srv2 1418/udp Timbuktu Service 2 Port 

...所以只是意味着你的應用程序中使用1418,因爲它發送的UDP數據包的源端口。30000不會變成文本服務名稱,因爲您的本地服務數據庫沒有該端口號的條目。

這本身並沒有解釋問題 - 實際上,服務器端應該接受使用任何源端口的客戶端。但是,在這種情況下,接收方似乎只接受源端口爲30000的數據包。爲此,您需要在發送數據包之前將套接字綁定到本地地址INADDR_ANY和端口30000。