我试图通过firefox扩展建立点对点(UDP)通信。我有python程序在命令行上工作。我使用它构建了一个xpcom组件。但令人惊讶的是,我只能从命令行python程序通过它接收消息。
我们尝试了以下(所有在localhost上工作):
Firefox XPCOM组件作为发件人 - > firefox XPCOM组件作为接收器 - 无法正常工作
Python命令行作为发件人 - > firefox xpcom组件作为接收器 - 工作
firefox xpcom组件作为发件人 - > Python命令行作为接收器 - 无法正常工作
Python命令行作为发件人 - > python命令行作为接收器 - 工作
当我们使用wireshark观察数据包时,我们得到了一些差异 -
Firefox xpcom到python命令行和 firefox xpcom到firefox xpcom (哪些没用)有包记录如下
由
生成的此类数据包(标记为非数字的源端口)的Winsock(C ++)
XPCOM组件
C#
...UDP Source port: timbuktu-srv2 Destination port: 30000
python命令行到python命令行和 Python命令行到XPCOM (确实有效)的数据包记录如下
... UDP Source port: 30000 Destination port: 30000
我对网络知之甚少,但标有..Source port: timbuktu-srv2..
的记录无法到达目的地。
我一直在尝试使用Python,C ++(Winsock),C#进行p2p通信,但只能用Python才能成功,我只能观察到这种类型的特定记录与python ...
一些网络大师可以点亮吗?
答案 0 :(得分:0)
您看到的timbuktu-srv2
只是Wireshark根据已知服务列表查找实际端口号的结果。如果您查看IANA assigned port numbers list,则会看到此条目:
timbuktu-srv2 1418/udp Timbuktu Service 2 Port
...这意味着您的应用程序使用1418作为其发送的UDP数据包的源端口。 30000不会变为文本服务名称,因为您的本地服务数据库没有该端口号的条目。
这本身并没有解释这个问题 - 实际上,服务器端应该使用它想要的任何源端口接受客户端。但是,在这种情况下,接收方似乎只接受源端口为30000的数据包。要实现这一点,您需要在发送数据包之前将套接字绑定到本地地址INADDR_ANY
和端口30000(或多个)。