我正在用Android 4.0编写UDP服务器程序(api 15)程序启动时,我无法连接到安卓中的UDP服务器
环境:
virtualbox, android x84 4.0, ping to/from virtualbox-android are ok,
UDP 服务器代码:
DatagramSocket ds = new DatagramSocket(9101);
<uses-permission android:name="android.permission.INTERNET" />
Android中的Netstat显示:
udp6 0 0 :::9101 :::* CLOSE
如何制作普通的 IPv4 UDP 侦听套接字?
尝试
DatagramSocket ds = new DatagramSocket(9101, InetAddress.getByName("192.168.1.1"));
看看这是否可行。您也可以先创建套接字,然后再绑定,例如:
DatagramSocket ds = new DatagramSocket(null);
ds.bind(new InetSocketAddress("192.168.1.1", 9101));
您无法在主线程中接收或执行网络流量。
您必须创建一个单独的可运行线程才能执行此操作:
new Thread(new Runnable() {
public void run() {
try {
if (clientsocket == null) {
clientsocket = new DatagramSocket(null);
clientsocket.bind(new InetSocketAddress("0.0.0.0", 1337));
clientsocket.setBroadcast(true);
}
byte[] receivedata = new byte[1024];
while (true) {
DatagramPacket recv_packet = new DatagramPacket(
receivedata, receivedata.length);
clientsocket.receive(recv_packet);
alertMessage = new String(recv_packet.getData());
InetAddress ipaddress = recv_packet.getAddress();
int port = recv_packet.getPort();
String msg = "RECEIVED UDP MSG FROM " + ipaddress.toString() + ":" + Integer.toString(port) + " :" + alertMessage; Log.d("UDP", msg);
myHandler.post(alertMsg);
}
} catch (Exception e) {
Log.e("UDP", "S: Error", e);
}
}
}).start();
然后在单独的类代码中,可能会干扰主 UI 的可运行任务。
final Runnable alertMsg = new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), alertMessage, Toast.LENGTH_LONG).show();
}
};