0

リモート SIP UDP ポート 5060 がクライアント マシンから到達可能かどうかを確認する必要があるプログラムに取り組んでいます。

UDP ポートの可用性を直接確認する方法はありません。OPTIONSメッセージをSIP UDPサーバーに送信し、サーバーがJavaでクライアントに返信する単純なJavaクラスを作成したいと考えています。

ヘルプ/指示は大きな助けになります!

ありがとう、アヌパム

ご回答ありがとうございます。以下のコードを試しましたが、サーバーからの応答がありませんでした:

String message = "OPTIONS sip:opensips@host;transport=udp SIP/2.0\r\nCall-ID: 7df5e96c6b1b98af25ad6c7845d48f5d@49.249.132.30\r\nCSeq: 1 OPTIONS\r\nFrom: \"Anupam\" <sip:Anupam@localhost:5080>;tag=textclientv1.0\r\nTo: \"opensips\" <sip:opensips@host>\r\nVia: SIP/2.0/UDP 49.249.132.30:5080;branch=z9hG4bK-3938-f66aaa8dda2fe3b863b4acde5fbcab67\r\nMax-Forwards: 70\r\nContact: \"Anupam\" <sip:Anupam@localhost:5080>\r\nContent-Length: 0\r\n\r\n";


System.out.println("Message is "+ message);
byte [] data = message.getBytes();
DatagramPacket packet = new DatagramPacket( data, data.length, host, port ) ;

しかし、うまくいきませんでした。

4

2 に答える 2

0

REGISTER メソッドを使用してリモート側の UDP sip サービスの可用性を確認するには、次のコードを使用できます。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Random;

public class CheckSipUdp{
    //Check remote SIP service availability
    public void checkSipUdp(String ipAddress, int outPort)throws Exception{
        DatagramSocket sipSocket = new DatagramSocket(0);
        sipSocket.setSoTimeout(1000);
        InetAddress inetIpAddress = InetAddress.getByName(ipAddress);
        byte [] sendData = new byte[1024];
        byte [] receiveData = new byte[1024];

        //Message/Method which will be used for checking remote server availability.
        String method = "REGISTER sip:" + ipAddress + ":" + outPort + " SIP/2.0\r\nCall-ID: " + generateCallId() + "@" + InetAddress.getLocalHost().getHostAddress() +"\r\nCSeq: 1 REGISTER\r\nFrom: <sip:" + InetAddress.getLocalHost().getHostAddress() + ":" + sipSocket.getLocalPort() + ">;tag=" + new Random().nextInt() + "\r\nTo: <sip:alice@" + ipAddress + ":" + outPort + ">\r\nVia: SIP/2.0/UDP " + InetAddress.getLocalHost().getHostAddress() + ":" + sipSocket.getLocalPort() + ";branch=z9hG4bK-323032-" + generateCallId() + "\r\nMax-Forwards: 70\r\nContact: <sip:" + InetAddress.getLocalHost().getHostAddress()+ ":" + sipSocket.getLocalPort() + ">\r\nContent-Length: 0\r\n\r\n";
        sendData = method.getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, inetIpAddress, 5060);
        sipSocket.send(sendPacket);

        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        sipSocket.receive(receivePacket);

        String response = new String(receivePacket.getData());
        System.out.println(ipAddress + "\n" + response);
        sipSocket.close();
    }

    //Generating unique callID
    public static String generateCallId(){
       Random r = new Random();
       long l1 = r.nextLong() * r.nextLong();
       long l2 = r.nextLong() * r.nextLong();
       return Long.toHexString(l1) + Long.toHexString(l2);

    }

    public static void main(String [] args) throws Exception{
        CheckSipUdp sip = new CheckSipUdp();
        sip.checkSipUdp(args[0], Integer.parseInt(args[1]));

    }
}
于 2013-11-20T12:33:12.793 に答える