2010-09-11 3 views
1

code:java.net.SocketException: Opération non autorisée

final int port = 5060; 
byte[] inviteBytes = sipInvite.getBytes(); 
DatagramPacket packet = new DatagramPacket(inviteBytes, inviteBytes.length, toInetAddress, port); 
DatagramSocket serverSocket = new DatagramSocket(port); 
serverSocket.send(packet); 

qui lance:

09-10 19:18:00.107: WARN/System.err(5408): java.net.SocketException: Operation not permitted 
09-10 19:18:00.117: WARN/System.err(5408): at org.apache.harmony.luni.platform.OSNetworkSystem.sendDatagramImpl(Native Method) 
09-10 19:18:00.117: WARN/System.err(5408): at org.apache.harmony.luni.platform.OSNetworkSystem.sendDatagram(OSNetworkSystem.java: 571) 
09-10 19:18:00.117: WARN/System.err(5408): at org.apache.harmony.luni.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java: 275) 
09-10 19:18:00.117: WARN/System.err(5408): at java.net.DatagramSocket.send(DatagramSocket.java:463) 
09-10 19:18:00.117: WARN/System.err(5408): at com.icast.mypie.sip.SipClient.doConnect(SipClient.java:71) 
09-10 19:18:00.117: WARN/System.err(5408): at com.icast.mypie.sip.SipClient.run(SipClient.java:43) 

Nexus 2.2, appareil se connecte via wifi. Le port n'est pas bloqué. Datagram envoyer fonctionne à partir de android 1.5 moto flou.

+0

(a) Veuillez formater votre code la prochaine fois. (b) Quelle est la question? –

+0

1) sure.Question: Pourquoi obtiendrait-on l'opération – vijil

+0

2) Pourquoi une erreur d'opération ne serait-elle pas permise? Que peut-on faire pour le résoudre? – vijil

Répondre

1

Au lieu d'envoyer les octets du SIPmessage, essayez d'envoyer quelques octets aléatoires à travers le DatagramSocket au même endroit dans le code, cela devrait fonctionner (uniquement pour vérifier le problème)

Je ne pouvais pas envoyer un SIPmessage dans mon programme aussi, et il s'est avéré qu'il y avait un problème avec la charge SDP dans le message SIPMessage, en particulier avec des espaces vides dans certains endroits. Le SIPMessage avec SDP payload pourrait être envoyé via l'émulateur (2.2 & 2.3.3), mais ne pourrait pas être envoyé par mon G1 et le Nexus S (avec Android 2.3.3 et Android 2.3.4).

La raison exacte du comportement de DatagramSocket n'est toujours pas claire, mais je vais continuer avec.

Questions connexes