0

我正在尝试通过 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(不起作用)具有如下数据包记录

此类数据包(源端口标记为非编号)由

温索克(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 ..

一些网络大师可以闪光吗?

4

1 回答 1

0

timbuktu-srv2您看到的只是 Wireshark 根据其已知服务列表查找实际端口号的结果。如果您检查IANA 分配的端口号列表,您将看到以下条目:

timbuktu-srv2   1418/udp   Timbuktu Service 2 Port

...所以这只是意味着您的应用程序使用 1418 作为它发送的 UDP 数据包的源端口。30000 不会变成文本服务名称,因为您的本地服务数据库没有该端口号的条目。

这本身并不能解释问题 - 实际上,服务器端应该使用它想要的任何源端口接受客户端。但是,在这种情况下,接收方似乎只接受源端口为 30000 的数据包。为此,您需要INADDR_ANY在发送数据包之前将套接字绑定到本地地址和端口 30000。

于 2009-09-28T00:40:45.887 回答