2012-10-03 2 views
1

에뮬레이터 대신 장치를 사용하여 UDP를 통해 SIP 패킷을 포트 5060으로 보낼 때 Android에서 문제가 발생합니다. 예외는 다음과 같은 갤럭시 넥서스와 같은 일부 장치에안드로이드가 포트 5060을 통해 SIP 패킷을 전송합니다.

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

같은 코드는 아수스 변압기 TF101 및 갤럭시 탭 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이 발생합니다. 나는 문제가 무엇인지, 그런 문제를 해결하는 방법을 모릅니다.

+0

방해가 될 수있는 방화벽이나 보안 소프트웨어는 무엇입니까? – plmaheu

+0

실제 IP 주소를 사용하고 있습니까? 이 IP는 개인 클래스 C 네트워크에 연결되어 있지 않으면 해결할 수 없습니다. 대부분의 경우 장치 네트워크 주소는 192.168 ...로 시작하는 클래스 B입니다. – Luis

+0

장치가 클래스 C 네트워크에 있습니다. 그러나 보안이 있는지 여부를 조사 할 것입니다. – frans1989

답변

1

문제가 해결되었으며 SIP 패킷의 페이로드에서 오류가 발생했습니다. SIP 패킷의 CSeq 값이 초기에 0으로 설정되었습니다. 대신 1에서 시작했습니다.

관련 문제