我正在尝试使用多播套接字在Java中创建服务器-客户端。
服务器通过键盘发送与“退出”不同的内容, 在当地作品完美。 这是我的客户端和服务器代码:
客户:
import java.io.*;
import java.net.*;
public class MCClient {
public static void main(String[] args) throws IOException {
MulticastSocket s = new MulticastSocket(10000);
InetAddress addressMultiCast = InetAddress.getLocalHost();
s.setInterface(addressMultiCast);
s.setBroadcast(true);
InetAddress group = InetAddress.getByName("231.0.0.1");
s.joinGroup(group);
String salida = new String();
while (!salida.equals("salir")) {
byte[] buffer = new byte[256];
DatagramPacket dgp = new DatagramPacket(buffer, buffer.length);
s.receive(dgp);
byte[] buffer2 = new byte[dgp.getLength()];
System.arraycopy(dgp.getData(),
0,
buffer2,
0,
dgp.getLength());
salida = new String(buffer2);
System.out.println(salida);
}
s.leaveGroup(group);
s.close();
}
}
服务器:
import java.io.*;
import java.net.*;
public class MCServer {
public static void main(String[] args) throws IOException {
MulticastSocket s = new MulticastSocket();
InetAddress addressMultiCast = InetAddress.getLocalHost();
s.setInterface(addressMultiCast);
s.setBroadcast(true);
InetAddress group = InetAddress.getByName("231.0.0.1");
byte[] vacio = new byte[0];
DatagramPacket dgp = new DatagramPacket(vacio, 0, group,
10000);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String linea = br.readLine();
while (!linea.equals("salir")) {
byte[] buffer = linea.getBytes();
dgp.setData(buffer);
dgp.setLength(buffer.length);
s.send(dgp);
linea = br.readLine();
}
s.close();
}
}
我有一个OpenVPN服务器,以确保所有用户都在同一网络上,但是当我运行客户端和服务器多播时,如果它们位于不同的网络,WLAN和WiFi上,但都连接到VPN,则无法使用;如果它们全部在WLAN中,则它们起作用;如果它们全部在WiFi中,则它们也不起作用。你能告诉我我做错了吗?我已经检查了网络接口,当每个人连接到VPN时,网络接口都是相同的。谢谢