0

我实际上正在使用 Jain SIP 开发一个 SIP 应用程序,并且我注意到 WireShark 实际上我想在 SipProvider 对象的初始化过程中使用的端口并未用于发送请求。例如 :

公共 SipLayer(字符串用户名,字符串 ip,int 端口)抛出 PeerUnavailableException,TransportNotSupportedException,InvalidArgumentException,ObjectInUseException,TooManyListenersException {

    setUsername(username);
    sipFactory = SipFactory.getInstance();
    sipFactory.setPathName("gov.nist");
    Properties properties = new Properties();
    properties.setProperty("javax.sip.STACK_NAME", "MyApp");
    properties.setProperty("javax.sip.IP_ADDRESS", ip);

    properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32");
    properties.setProperty("gov.nist.javax.sip.SERVER_LOG",
            "textclient.txt");
    properties.setProperty("gov.nist.javax.sip.DEBUG_LOG",
            "textclientdebug.log");

    sipStack = sipFactory.createSipStack(properties);
    headerFactory = sipFactory.createHeaderFactory();
    addressFactory = sipFactory.createAddressFactory();
    messageFactory = sipFactory.createMessageFactory();

    ListeningPoint tcp = sipStack.createListeningPoint(ip, port, "tcp");

    sipProvider = sipStack.createSipProvider(tcp);
    sipProvider.addSipListener(this);
}

这是我正在初始化 sipProvider 的构造函数。我正在使用 TCP,我想使用 5600 端口。因此,在发送无状态请求时,我在方法中使用了以下代码:

sipProvider.sendRequest(request);

在进行捕获时,我注意到正在使用的 TCP 端口不是我选择的 5600,而是像 52065 这样的端口。

有人可以告诉我如何强制 sipProvider 对象使用我的 5600 TCP 端口吗?

谢谢你的帮助 :)

4

1 回答 1

0

这是一个 OS/Java/TCP 限制。这并非不可能,但它不适用于大多数机器,因此 JAIN-SIP 像大多数其他 SIP 设备一样使用临时端口。请参阅此答案https://serverfault.com/questions/326819/does-the-tcp-source-port-have-to-be-unique-per-host

于 2014-07-17T20:22:51.500 回答