在做一个Android程序,需要监听局域网中的UDP广播,并且发送UDP广播。当两部手机同时连到一个路由器的时候就能正常接收发送UDP广播,但是当用其中一部手机建立wifi热点,另一部手机连这个wifi热点的时候,建立wifi热点的手机发送广播就会出现这样的错误:sendto failed: ENETUNREACH (Network is unreachable)
请问这是为什么?
附上UDP广播部分的代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UdpHelper {
private int port = 9888;
private DatagramSocket ds = null;
private DatagramPacket dp = null;
private byte[] buf = new byte[1024]; //存储发来的消息
private StringBuffer sbuf ;
public UdpHelper() {
sbuf = new StringBuffer();
try {
ds = new DatagramSocket(port);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dp = new DatagramPacket(buf, buf.length);
}
public String SendMessage(String msg) {
String host = "255.255.255.255"; //广播地址
String message = msg;
try {
InetAddress adds = InetAddress.getByName(host);
DatagramSocket ds = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(message.getBytes(),
message.length(), adds, port);
ds.send(dp);
ds.close();
} catch (UnknownHostException e) {
return e.getMessage();
} catch (SocketException e) {
return e.getMessage();
} catch (IOException e) {
return e.getMessage();
}
return "Success";
}
public String ReceiveMessage()
{
sbuf.delete(0, sbuf.length());
try {
ds.receive(dp);
int i;
for(i=0;i<1024;i++){
if(buf[i] == 0){
break;
}
sbuf.append((char) buf[i]);
}
buf = new byte[1024];
dp = new DatagramPacket(buf, buf.length);
} catch (IOException e) {
return e.getMessage();
}
return sbuf.toString();
}
}