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