3 votes

Java - Écoute des paquets RTP sur un port local

Je travaille actuellement sur une application client qui écoute les paquets RTP sur le port 5004. Comme il peut y avoir plusieurs serveurs qui envoient des paquets RTP, je ne peux pas utiliser les sockets pour me connecter à un hôte distant spécifique. À la place, j'ai essayé ce qui suit pour écouter sur un port local :

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);

L'une ou l'autre des options ci-dessus me permettra de bénéficier de cette exception :

java.net.ConnectException: Connection refused: connect

J'ai également essayé d'utiliser une DatagramSocket, mais les DatagramPackets nécessitent que je spécifie la taille du paquet à lire.

En résumé, je dois trouver un moyen d'écouter sur le port local 5004 des paquets RTP de taille inconnue sans me connecter à un hôte/adresse distant(e) spécifique. Toute aide sera grandement appréciée !

EDIT :

J'ai maintenant un ServerSocket configuré pour écouter les connexions, mais je n'arrive toujours pas à lire les paquets.

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);
        }
}

Note : Les paquets RTP sont envoyés par l'intermédiaire d'une adresse multicast.

Le problème s'est avéré être le Multicast. Reportez-vous à la réponse de Nikolaï. Merci beaucoup !

2voto

Ravi Wallau Points 5012

Vous devez créer un nouveau Socket serveur puis utilisez la méthode accept() pour utiliser la socket créée lorsque quelqu'un se connecte à votre serveur/port d'écoute.

ServerSocket server = new ServerSocket(5004);
Socket s = server.accept();
// You can now use the socket "s"...

2voto

Nikolai N Fetissov Points 52093

Vous devez utiliser java.net.MulticastSocket et rejoindre le groupe de multidiffusion . Quelque chose comme :

// 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 );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X