UDP用的相对来说比较少,但是最近在一个小项目中也在使用。
主要是发送简单的字符给到服务端,接收服务端发送过来的数据,然后再做相应的处理。感觉使用发送端和接收端更加贴切。
UDP:User Datagram Protocol,用户数据报协议。
使用UDP通信的步骤:
1.服务端(接收端)
1)使用DatagramSocket(int port)创建一个指定端口的数据报套接字。
2)使用DatagramPackage(byte[] buf,int length)创建一个数据报来接收UDP包。
3)使用DatagramSocket的receiver方法来接收UDP包。
4)关闭数据报套接字。
2.客户端(发送端)
1)使用DatagramSocket创建一个数据报套接字。
2)使用DatagramPackage(byte[] buf,int length,InetAddress address,int port)创建一个要发送的UDP包。
3)使用DatagramSocket的send方法来发送UDP包。
4)关闭数据报套接字。
其实步骤比较简单:发送端使用DatagramSocket的send发送DatagramPackage,接收端使用DatagramSocket的receiver接收DatagramPackage。
实例:
服务端(接收端),Java程序,运行在PC上。
public class MainServer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte[] msg = new byte[520];
DatagramPacket dp = new DatagramPacket(msg, msg.length);
DatagramSocket ds = null;
try {
ds = new DatagramSocket(28001);
try {
ds.receive(dp);
String recerverStr = new String(dp.getData());
System.out.println("zhangmq receiver : "+recerverStr);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(ds != null){
ds.close();
}
}
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
String str = "zhou hao yu shi sha bi ~";
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
try {
InetAddress serverAddr = InetAddress
.getByName("172.16.11.152");
DatagramPacket dp = new DatagramPacket(str.getBytes(),
str.length(), serverAddr, 28001);
try {
ds.send(dp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (ds != null) {
ds.close();
}
}
}
}.start();
}
}