Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多播套接字不';不接收数据包_Java_Multicast - Fatal编程技术网

Java 多播套接字不';不接收数据包

Java 多播套接字不';不接收数据包,java,multicast,Java,Multicast,我正在开发一个简单的多播音频流。我在同一台机器上编写了serer和client,因此我使用localhost和多播组。该系统在一台机器上工作,但当我试图使用另一台电脑作为服务器时,我无法让它们连接。情况如下: 客户端首先敲打tcp服务器,让客户端知道多播组IP端口。在此之后,客户机开始通过multicastSocket.receive()列出地址 以下是来自系统的重要信息: (我在下面的代码中遗漏了异常和其他不重要的内容) 服务器 重要的是要知道,“LAN连接”是我在服务器系统上的网络接口的名称

我正在开发一个简单的多播音频流。我在同一台机器上编写了serer和client,因此我使用localhost和多播组。该系统在一台机器上工作,但当我试图使用另一台电脑作为服务器时,我无法让它们连接。情况如下:

客户端首先敲打tcp服务器,让客户端知道多播组IP端口。在此之后,客户机开始通过
multicastSocket.receive()列出地址

以下是来自系统的重要信息: (我在下面的代码中遗漏了异常和其他不重要的内容)

服务器 重要的是要知道,“LAN连接”是我在服务器系统上的网络接口的名称

int多播端口=8888;
InetAddress multicastIP=InetAddress.getbyName(“228.5.6.7”);
InetSocketAddress multicastAddress=新的InetSocketAddress(multicastIP,multicastPort);
NetworkInterface Multicasterface=NetworkInterface.getByName(“LAN连接”);
MulticastSocket MulticastSocket=新的MulticastSocket(multicastPort);
multicastSocket.joinGroup(multicastAddress,multicastIP);
while(true){
byte[]buffer=audioIn.readBytes();
DatagramPacket数据包=新的DatagramPacket(buffer,buffer.length,multicastIP,multicastPort);
多播套接字发送(数据包);
}
客户端 客户端从服务器请求多播IP和端口。(tcp服务器线程处理此问题)与服务器类似,“LAN连接”是客户端网络接口的名称

int multicastPort=server.request(“端口”);
String multicastIP_String=server.request(“IP”);
InetAddress multicastIP=InetAddress.getbyName(multicastIP_字符串);
InetSocketAddress multicastAddress=新的InetSocketAddress(multicastIP,multicastPort);
NetworkInterface Multicasterface=NetworkInterface.getByName(“LAN连接”);
MulticastSocket MulticastSocket=新的MulticastSocket(multicastPort);
multicastSocket.joinGroup(multicastAddress,multicastIP);
while(true){
字节[]缓冲区=新字节[2048];
DatagramPacket数据包=新的DatagramPacket(buffer,buffer.length);
多播套接字接收(数据包);
}
用于请求/发送多播IP和端口的TCP连接起作用。一个名为CurrPorts的应用程序还告诉我,正确的端口已被保留,但是,使用wireshark,我在客户端系统和服务器系统上都找不到发送/接收的任何数据包。(我观看了88号端口,但没有流量,…)

两台电脑都连接到一个路由器(D-Link DIR-635),我想我会注意到路由器是否会阻止多播,对吗

我错过了什么?我应该尝试不同的端口或IP,还是有什么东西可以阻止数据包?我只使用windows防火墙,甚至为了测试而关闭了它

下面是一个运行示例。我在同一台机器上运行这个没有问题,但是当我在同一个网络中的笔记本电脑上运行服务器时,什么都不起作用

服务器

package multicastserver;

import java.net.*;

public class MulticastServer {

    public static void main(String[] args) {
        int multicastPort = 8888;
        try {
            InetAddress multicastIP = InetAddress.getByName("228.5.6.7");
            InetSocketAddress multicastAddress = new InetSocketAddress( multicastIP, multicastPort );

            NetworkInterface multicastInterface = NetworkInterface.getByName( "LAN-Verbindung" );
            MulticastSocket multicastSocket = new MulticastSocket( multicastPort );
            multicastSocket.joinGroup(multicastAddress, multicastInterface);

            int counter = 0;
            while(true) {
                String message = "This is server, packet nr. " + counter;
                counter++;
                byte [] buffer = message.getBytes("UTF-8");
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastIP, multicastPort);
                multicastSocket.send(packet);
                System.out.println("Sended:   " + message);
                Thread.sleep(500);
            }
        } catch (Exception e) {
            System.out.println(e);
            return;
        }
    }
}
客户端

package multicastclient;

import java.net.*;

public class MulticastClient {

    public static void main(String[] args) {
        int multicastPort = 8888;
        try {
            InetAddress multicastIP = InetAddress.getByName("228.5.6.7");
            InetSocketAddress multicastAddress = new InetSocketAddress( multicastIP, multicastPort );

            NetworkInterface multicastInterface = NetworkInterface.getByName( "LAN-Verbindung" );
            MulticastSocket multicastSocket = new MulticastSocket( multicastPort );
            multicastSocket.joinGroup(multicastAddress, multicastInterface);


            while(true) {    
                byte [] buffer = new byte[40];

                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
                multicastSocket.receive(packet);
                buffer = packet.getData();
                String message = new String(buffer, "UTF-8");
                System.out.println("Received:   " + message);

            }
        } catch (Exception e) {
            System.out.println(e);
            return;
        }
    }
}

我肯定会检查路由器配置,以确保多播没有被阻止——特别是在您使用的端口上。是否有从不被阻止的端口?(我将很快检查)路由器是否需要被告知他应该路由这些数据包?由于两台PC都在子网中,我认为路由器不会过滤某些东西。JDK中没有多播Socket,也没有带这些参数的joinGroup()方法。请张贴真实代码。不要在这里键入代码。复制并粘贴它。仍然存在错误。它不能编译。请粘贴代码。