gpt4 book ai didi

java - 模拟器中未从本地主机收到 UDP 数据包

转载 作者:行者123 更新时间:2023-12-02 01:16:08 32 4
gpt4 key购买 nike

我的应用程序在模拟器中运行时无法接收 UDP 数据包。 UDP 数据包由“lo​​calhost”上的以下 java 程序通过端口 49999 发送。

    DatagramSocket clientsocket;
DatagramPacket dp;
BufferedReader br;
InetAddress ia;
byte buf[] = new byte[1024];
int cport = 50000, sport = 49999;

clientsocket = new DatagramSocket(cport);
dp = new DatagramPacket(buf, buf.length);
br = new BufferedReader(new InputStreamReader(System.in));
ia = InetAddress.getLocalHost();

while(true)
{
Random rand = new Random();
String str1 = rand.nextInt(100) + "";
buf = str1.getBytes();

System.out.println("Sending " + str1);
clientsocket.send(new DatagramPacket(buf,str1.length(), ia, sport));

try{
Thread.sleep(100);
} catch(Exception e){}
}

在同一本地主机上运行的另一个 java UDP 服务器程序可以正常接收数据包。这意味着数据包已正确发送到 localhost:49999。

为了将数据包从本地主机转发到模拟器,我进行了 telnet 重定向,如下所示:

telnet localhost 49999
redir add udp:49999:49999

应用程序中的 UDP 接收器如下所示:

byte[] data = new byte[1400];
DatagramPacket packet = new DatagramPacket(data, 1400);
DatagramSocket socket = new DatagramSocket(49999);
socket.setSoTimeout(200);
try{
socket.receive(packet); ---->> This throws a SocketTimeoutException
} catch(SocketTimeoutException e){}

我的理解是,telnet 重定向应该负责将数据包从我的开发计算机的 localhost:49999 转发到模拟器的 localhost:49999,以便数据在 DatagramSocket(49999) 上可用。然而它总是抛出 SocketTimeoutException。

了解这里拼图中缺少的部分将会有很大帮助。

最佳答案

连接到本地主机后,您可能需要检查端口是否确实按照 cmd 中的命令 netstat -na 指定。使用 IP 127.0.0.1 也可能值得尝试。

关于java - 模拟器中未从本地主机收到 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57658867/

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