一.添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
二.客户端的定时发数据
new Thread(new Runnable() {
@Override
public void run() {
InetAddress address = null;
try {
address = InetAddress.getByName("127.0.0.1");
} catch (UnknownHostException e) {
e.printStackTrace();
}
int port = 8913;
byte[] data = "用户名:shabi;密码:555".getBytes(); //发送数据
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
while(true) {
Thread.sleep(2000);
Log.d(TAG,"send =======");
socket.send(packet);
Log.d(TAG,"send ok");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
三.服务端接受数据
new Thread(new Runnable() {
@Override
public void run() {
int port = 8913;
byte[] buf = new byte[512];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
try{
//1.datagramSocket 实例,并监听某个端口
DatagramSocket socket = new DatagramSocket(port);
Log.d(TAG,"new socket");
while (true) {
Log.d(TAG,"server将一直等待连接的到来");
socket.receive(packet);
Log.d(TAG,"=====================");
String ip = packet.getAddress().getHostAddress();
port = packet.getPort();
Log.d(TAG,"客户端: "+ip+"\tport: "+port);
Log.d(TAG,"msg: " + new String(packet.getData(),0,packet.getLength()));
}
} catch (Exception e) {
}
}
}).start();
结果如下:
注意:
服务器和客户端不可以在主线程运行,否在数据的收发会出现问题.