gpt4 book ai didi

java - UDP 客户端向服务器发送数据,但没有收到响应

转载 作者:行者123 更新时间:2023-11-30 04:16:43 24 4
gpt4 key购买 nike

我正在创建一个可以与我的电脑通信的简单 Android 应用程序。在我的电脑上,我有一个非常简单的 Java UDP 服务器。

public void run(){

try{
DatagramSocket serverSocket = new DatagramSocket(port);
byte[] receiveData = new byte[8];
byte[] sendData = new byte[8];

while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
String sendString = "polo";
sendData = sendString.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}catch (Exception e){
}
}

我的 android 应用程序中还有另一段简单的代码,它向服务器发送 UDP 数据包并等待响应。

public void checkServerOnline(View v) {
try {
int port = 46001;
DatagramSocket clientSocket = new DatagramSocket();
clientSocket.setSoTimeout(1800);
InetAddress IPAddress = InetAddress.getByName(host);
byte[] sendData = new byte[8];
byte[] receiveData = new byte[8];
String sentence = "marco";
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
clientSocket.close();
} catch (Exception e) {
}

我遇到的问题是我的客户在等待响应时超时。服务器确实接收到字符串“marco”并且可能正在发送响应“polo”,但客户端没有接收到它。我试过在客户端上删除超时,但它只是卡住,直到我强制关闭应用程序。

任何人都可以看到我的代码中的错误吗?我不明白为什么它不起作用。我已经成功地使用相同的设置成功设置了 TCP 服务器和客户端,但似乎无法执行 UDP。

最佳答案

服务器发送到错误的端口。它应该发送到接收到的数据报中的端口,而不是它自己的端口。重用请求数据报并将数据更改为响应数据是最简单的:返回地址已经存在。

关于java - UDP 客户端向服务器发送数据,但没有收到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9865227/

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