使用 mozilla firefox 监听 UDP 端口的方法
Posted
技术标签:
【中文标题】使用 mozilla firefox 监听 UDP 端口的方法【英文标题】:Ways to listen a UDP port with mozilla firefox 【发布时间】:2011-09-20 14:18:41 【问题描述】:简而言之,我正在尝试编写一个 C++ XPCOM 组件,该组件侦听 UDP 端口并在每次 UDP 数据包到达时调用回调函数(javascript 函数)。
对不起,如果答案太明显了,但我想知道用 Mozilla 监听 UDP 端口的方法是什么(最好是容易做到的)?
我知道有一个叫做 nsIServerSocket 的接口允许一些监听器附加到它上面,但这只是为了打开 TCP 端口。是否有任何与此等效的 UDP(我可以在其中附加一个侦听器,每次 UDP 数据包到达时都会通知该侦听器)?
我也知道我可能会使用 PR_OpenUDPSocket 等。有没有办法在不处理线程的情况下使用它? (据我了解,我必须在打开端口后返回调用 javascript 函数)。
谢谢。
【问题讨论】:
【参考方案1】:如果您正在编写 C++ 代码,为什么需要限制自己使用 Mozilla 的 API?您可以直接使用 POSIX 套接字 API,请参阅 How to set up a Winsock UDP socket? 获取 WinSock 示例(Linux 和 OS X 的唯一区别应该是 WSAStartup()
调用是不必要的)。 nsIServerSocket
主要用于无法直接使用系统库的 JavaScript 代码。
如果您希望直接回答您的问题:不,没有用于创建 UDP 套接字的 XPCOM API。您已经找到了 NSPR API (PR_OpenUDPSocket()
),但它可能在设计时考虑了 DNS 通信,因为这几乎是浏览器唯一可以进行的 UDP 通信。不要期望太多。
附带说明:您可能希望避免使用二进制 XPCOM 组件并创建一个可以通过 js-ctypes 调用的本机库。 See here for the details.
【讨论】:
好吧,我只是认为如果我使用 Mozilla 的 API,可移植性就不会成为问题。感谢您的回答。 @aki:如今,可移植性通常是一个小得多的问题 - 在创建 NSPR 时它是一个大问题。以上是关于使用 mozilla firefox 监听 UDP 端口的方法的主要内容,如果未能解决你的问题,请参考以下文章
永别了 Firefox OS!Mozilla 宣布解散 Firefox OS 幕后团队
Mozilla 将 Firefox 57 浏览器 Firefox Quantum版发布