Android 通过端口 5060 发送 SIP 数据包

标签 android sip socketexception

我在 Android 上使用设备而不是模拟器将 SIP 数据包通过 UDP 发送到端口 5060 时遇到问题。异常(exception)情况是:

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端口发送的,如果我修改了端口,即使我修改了string sentence的内容,包也发送成功。但是,如果我通过端口 5060 发送 SIP 注册数据包,则会发生 SocketException。我不知道可能是什么问题或如何解决此类问题。

最佳答案

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

关于Android 通过端口 5060 发送 SIP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705628/

相关文章:

c# - 访问 SFTP 站点 : The requested name is valid, 时出现异常,但未找到请求类型的数据

java - 是什么导致了我的 java.net.SocketException : Connection reset?

android - 使用谷歌键盘作为输入在 EditText 上丢失跨度

android - 如何以编程方式获取Android中当前选定的应用程序包名称?

黑莓上的安卓 : How to Play Videos

android - 使用不同类的方法时应用程序崩溃

c - 用户播放时菜单文件未播放 "*",Asterisk-11.5.1 Confbridge

docker - 如何启用 docker 中的 sipster/pjsip 与外界之间的声音连接?

android - 使用 ConstraintLayout 查看与工具栏的重叠

java - 连接到 SMTP 服务器时出现 SocketException,但使用 telnet 时可以正常工作