gpt4 book ai didi

java udp广播问题

转载 作者:行者123 更新时间:2023-11-30 05:04:29 32 4
gpt4 key购买 nike

我的 udp 广播行为有问题,

public static final int PORT = 34567;

public static void main(String[] args) throws IOException,
InterruptedException {
if (args.length > 0 && args[0].equals("server")) {
int port;
if (args.length >= 2) {
port = Integer.parseInt(args[1]);
} else {
port = PORT;
}

DatagramSocket sr = new DatagramSocket(port, InetAddress.getLocalHost());

while (true) {
byte[] buf = new byte[256];
DatagramPacket pct = new DatagramPacket(buf, buf.length);
sr.receive(pct);
String s = new String(buf);
System.out.println(s.replaceAll("\0", "") + " " + pct.getAddress().toString());
}
} else {
DatagramSocket ss = new DatagramSocket();
ss.setBroadcast(true);
byte[] b = new byte[100];
DatagramPacket p = new DatagramPacket(b, b.length);
p.setAddress(InetAddress.getByAddress(new byte[] { (byte) 255,
(byte) 255, (byte) 255, (byte) 255 }));
p.setPort(PORT);

int i = 0;
while (true) {
String s = new Integer(i++).toString();
System.out.println(s);
b = s.getBytes();
p.setData(b);
ss.send(p);
Thread.sleep(1000);
}

在机器 A 上,当我同时运行服务器和客户端时,它会立即收到多个数据包,因此我有以下输出

0 /192.168.253.5
0 /192.168.253.5
1 /192.168.253.5
1 /192.168.253.5
2 /192.168.253.5
2 /192.168.253.5

在其他机器B上,当我做同样的事情时,服务器根本没有收到任何数据包

当我在机器 A 上运行客户端并在机器 B 上运行服务器时,服务器接收数据包

当我在机器 A 上运行服务器并在机器 B 上运行客户端时,服务器没有收到任何数据包

我认为这取决于发送udp套接字的本地地址,因为每台机器都连接到多个网络,并且本地地址是随机选择的(这是真的吗?),并且它只向本地地址所属的网络发送广播到,我说得对吗?

如果是这样,我如何向电脑连接的所有网络发送广播?还有为什么收到多个相同的数据包(第一种情况)

最佳答案

DatagramSocket sr = new DatagramSocket(port, InetAddress.getLocalHost());

将第二个参数更改为 null,或忽略它。您并不关心从哪个 IP 地址接收数据报。

p.setAddress(InetAddress.getByAddress(new byte[] { (byte) 255, (byte) 255, (byte) 255, (byte) 255 }));

广播到 255.255.255.255 已被弃用约 20 年。使用子网特定的广播地址。更好的是,研究一下多播。

关于java udp广播问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588585/

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