Java 如何从UDP广播接收多个响应
我有一个案例,我需要在特定端口上的wifi中发送广播和UDP请求,我正在呼叫的特定设备应返回一些信息,以便我可以确定它们在该网络中的数量。 到目前为止,我有:Java 如何从UDP广播接收多个响应,java,android,sockets,udp,Java,Android,Sockets,Udp,我有一个案例,我需要在特定端口上的wifi中发送广播和UDP请求,我正在呼叫的特定设备应返回一些信息,以便我可以确定它们在该网络中的数量。 到目前为止,我有: public class UDP extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... voids) { String text = ""; int s
public class UDP extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
String text = "";
int server_port = 7432;
DatagramPacket receivePacket = null;
DatagramSocket clientSocket = null;
try {
clientSocket = new DatagramSocket();
clientSocket.setSoTimeout(5);
InetAddress IPAddress = InetAddress.getByName("255.255.255.255");
byte[] sendData = ("02904").getBytes();
byte[] receiveData = new byte[12];
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, server_port);
clientSocket.send(sendPacket);
receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
Log.e("Receiving response", "Response");
text = new String(receivePacket.getData());
clientSocket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
Log.e("Receiving response", "Response");
assert receivePacket != null;
text = new String(receivePacket.getData());
clientSocket.close();
} catch (IOException e) {
Log.e("Receiving response", "Response");
assert receivePacket != null;
text = new String(receivePacket.getData());
clientSocket.close();
}
return text;
}
@Override
protected void onPostExecute(String s) {
Log.e("Socket response", s);
}
}
公共类UDP扩展异步任务{
@凌驾
受保护的字符串背景(无效…无效){
字符串文本=”;
int服务器_端口=7432;
DatagramPacket receivePacket=null;
DatagramSocket clientSocket=null;
试一试{
clientSocket=newdatagramsocket();
clientSocket.setSoTimeout(5);
InetAddress IPAddress=InetAddress.getByName(“255.255.255.255”);
字节[]sendData=(“02904”).getBytes();
字节[]接收数据=新字节[12];
DatagramPacket sendPacket=新的DatagramPacket(sendData、sendData.length、IPAddress、服务器端口);
clientSocket.send(sendPacket);
receivePacket=新数据包(receiveData,receiveData.length);
clientSocket.receive(receivePacket);
Log.e(“接收响应”、“响应”);
text=新字符串(receivePacket.getData());
clientSocket.close();
}捕获(未知后异常e){
e、 printStackTrace();
}捕获(SocketException e){
Log.e(“接收响应”、“响应”);
assert receivePacket!=null;
text=新字符串(receivePacket.getData());
clientSocket.close();
}捕获(IOE异常){
Log.e(“接收响应”、“响应”);
assert receivePacket!=null;
text=新字符串(receivePacket.getData());
clientSocket.close();
}
返回文本;
}
@凌驾
受保护的void onPostExecute(字符串s){
Log.e(“套接字响应”,s);
}
}
使用网络中的一台设备进行测试会返回带有问号的奇怪三角形(我不确定,但我猜可能是编码问题),但我的实际问题是,我不知道如何获取一个列表,例如,并用所有响应的设备填充它。如何获取每个响应并将其另存为不同的响应,以便我可以解析它们?
我知道的所有请求都在代码中。响应将是字节[]
,其中12为大小和设备特定信息