3

そのため、現在、ポート5004でRTPパケットをリッスンするクライアントアプリケーションに取り組んでいます。RTPパケットを送信するサーバーが複数ある可能性があるため、ソケットを使用して特定のリモートホストに接続することはできません。代わりに、ローカルポートでリッスンするために次のことを試みました。

Socket socket = new Socket("127.0.0.1", 5004);
Socket socket = new Socket("localhost", 5004);
Socket socket = new Socket(InetAddress.getByName("localhost"), 5004);
Socket socket = new Socket(InetAddress.getLocalHost(), 5004);

上記のいずれかが私にこの例外を与えます:

java.net.ConnectException: Connection refused: connect

DatagramSocketも使用してみましたが、DatagramPacketsでは、読み取るパケットのサイズを指定する必要があります。

要約すると、特定のリモートホスト/アドレスに接続せずに、ローカルポート5004でサイズが不明なRTPパケットをリッスンする方法を見つける必要があります。どんな助けでも大歓迎です!

編集:

これで、接続をリッスンするようにServerSocketを設定しましたが、それでもパケットを読み取ることができません。

try {   ServerSocket server = new ServerSocket(5004);
        Socket s = server.accept();
        BufferedReader rtpReader = new BufferedReader(new InputStreamReader(s.getInputStream()));
        while (true){
            int k = rtpReader.read();
            if (k == -1) break;
            System.out.println(k);
        }
}

注:RTPパケットは、マルチキャストアドレスを介して送信されます。

問題はマルチキャストであることが判明しました。ニコライの答えを参照してください。どうもありがとう!

4

2 に答える 2

2

新しいServerSocketクラスを作成し、accept() メソッドを使用して、誰かがリッスン サーバー/ポートに接続したときに作成されたソケットを使用する必要があります。

ServerSocket server = new ServerSocket(5004);
Socket s = server.accept();
// You can now use the socket "s"...
于 2012-11-21T14:13:00.080 に答える
2

を使用して、マルチキャスト グループに参加するjava.net.MulticastSocket必要があります。何かのようなもの:

// put your multicast address here
InetAddress group = InetAddress.getByName( "244.10.10.10" );
MulticastSocket sock = new MulticastSocket( 5004 );
sock.joinGroup( group );

byte[] buf = new byte[1472];
DatagramPacket pack = new DatagramPacket( buf, buf.length );

while ( whatever ) {
    sock.receive( pack );
    // handle data
}

sock.leaveGroup( group );
于 2012-11-21T15:23:35.187 に答える