gpt4 book ai didi

java - MulticastSocket 未打开端口

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:16 26 4
gpt4 key购买 nike

我正在尝试在我的 PC(Ubuntu,客户端)和手机(Android,服务器)之间创建简单的多播通信。

单播/TCP 连接工作没有任何问题,定义的端口 (37659) 在 PC 和手机上均打开。尝试使用 MulticastSocket 时,没有打开任何端口。 nmap 告诉我指定的端口 (36963) 是一个 TCP 端口,并且它已关闭。 (当receive方法正在执行时)。

我做错了什么吗?或者防火墙阻止了多播套接字? (我尝试了大约 20 个不同的端口,但没有一个有效...,目前使用端口 36963)

编辑:防火墙完全关闭后,nmap 告诉我端口已关闭...

服务器代码(电话):

private void multicastLoop() {
String res = Build.FINGERPRINT + "\n";
final InetAddress group;
final MulticastSocket socket;
final DatagramPacket response;
try {
group = InetAddress.getByName("224.0.0.115");
socket = new MulticastSocket(mport);
socket.setLoopbackMode(true);
socket.setSoTimeout(10000);
socket.joinGroup(group);
response = new DatagramPacket(res.getBytes(), res.length(), group, mport);
} catch (IOException e) {
e.printStackTrace();
return;
}

Thread t = new Thread(new Runnable() {

@Override
public void run() {
while(isRunning) {
try {
byte[] data = new byte[1024];
DatagramPacket dm = new DatagramPacket(data, data.length);
socket.receive(dm);
Log.d("udp", "received");
if (Arrays.equals(dm.getData(), "someone there".getBytes())) {
socket.send(response);
}
} catch (SocketTimeoutException e) {
continue;
} catch (IOException e) {
e.printStackTrace();
}
}
try {
socket.leaveGroup(group);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

});
t.start();
}

客户端代码(计算机):

public String[] findServers() {
String hello = "someone there";
try {
InetAddress group = InetAddress.getByName(mhost);
MulticastSocket socket = new MulticastSocket(mport);
socket.setLoopbackMode(true);
socket.setSoTimeout(60000);
socket.joinGroup(group);
DatagramPacket p = new DatagramPacket(hello.getBytes(), hello.length(), group, mport);
byte[] buffer = new byte[1024];
socket.send(p);
DatagramPacket r = new DatagramPacket(buffer, buffer.length);
socket.receive(r);
socket.leaveGroup(group);
socket.close();
String srinfo = "";
byte[] data = r.getData();
for (byte b: data)
srinfo += (char) b;
System.out.println("Server found at " + r.getAddress().getHostName() + ": " + srinfo);
} catch (SocketTimeoutException e) {
return new String[] {"timeout"};
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

最佳答案

确保 mhost 设置为“224.0.0.115”而不是某个计算机名称。

确保您的路由器上启用了多播。

关于java - MulticastSocket 未打开端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21172927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com