【问题标题】:Android sending SIP Packets over port 5060Android 通过端口 5060 发送 SIP 数据包
【发布时间】:2012-10-03 09:32:52
【问题描述】:

使用设备而不是模拟器将 SIP 数据包通过 UDP 发送到端口 5060 时,我在 Android 上遇到了问题。例外是:

java.net.SocketException: sendto failed: EPERM(Opereation not permitted)

在某些设备(例如 Galaxy Nexus)上,相同的代码可以在其他设备(例如 Asus Transformer TF101 和 Galaxy Tab 2)上运行。我遇到了这些问题。我有所需的权限android.permission.INTERNET。当通过另一个端口(比如 9876)发送相同的 SIP 数据包时,数据包发送成功。即使通过端口 5060(不是 SIP 数据包)发送其他内容,数据包仍然可以成功发送。在某些设备上似乎不允许通过端口 5060 组合 SIP 数据包。我创建了一个测试程序来复制这个问题:

try
{
    DatagramSocket clientSocket = new DatagramSocket();
    InetAddress IPAddress = InetAddress.getByName("10.111.110.6");
    byte[] sendData = new byte[1024];
    byte[] receiveData = new byte[1024];
    String sentence = "Register sip ...";
    sendData = sentence.getBytes();
    DatagramPacket sendPacket = new DatagramPacket(sendData, 
        sendData.length, IPAddress, 5060);
    clientSocket.send(sendPacket);
    DatagramPacket receivePacket = new DatagramPacket(receiveData, 
        receiveData.length);
    clientSocket.receive(receivePacket);
    int x = receivePacket.getLength();
    String modifiedSentence = new String(receivePacket.getData(), 0, x);
    ds_tv.setText("FROM SERVER:" + modifiedSentence + " Length: "+ x);
    clientSocket.close();
}
catch (Exception e)
{
    Log.e("Test", e.getMessage());
    ds_tv.setText(e.getMessage());
}

这个测试程序只包含一个按钮,上面的代码在它的 onClick() 事件中被调用。由包含 SIP 注册数据包的String sentence 组成的数据包不会通过端口 5060 发送。如果我修改端口,数据包发送成功,即使我修改了字符串语句的内容。但是,如果我通过端口 5060 发送 SIP 注册数据包,则会出现 SocketException。我不知道可能是什么问题或如何解决这样的问题。

【问题讨论】:

  • 任何防火墙或安全软件可能会妨碍您?
  • 您是否在真实设备中使用上述 IP 地址?除非您连接到私有 C 类网络,否则此 IP 将无法访问。您的设备网络地址很可能是以 192.168 开头的 B 类...
  • 设备在 C 类网络上。我会调查是否有任何安全措施,但不应该有任何障碍。
  • 途中没有防火墙。我还在设备上安装了数据包嗅探器,发现数据包甚至没有从设备发送。我不明白可能是什么问题,因为在某些设备和模拟器上,相同环境中的相同代码可以工作。

标签: android sip socketexception


【解决方案1】:

问题已解决,错误是由 SIP 数据包的负载引起的。 SIP 数据包中的 CSeq 值最初设置为 0。相反,它必须从 1 开始。

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多