今天看了Udp编程的相关内容简单记录一下。
相比与Tcp,Udp的优点就是发送速度快,但是确不可靠,因为它是将数据封装成包进行传,不需要建立连接。因此它在数据发送结束时无需释放资源。它不适合传输大量数据,每个数据包的大小需要控制在64k以内。
下面是它的简单案例,发送端给接收端发送hello,receive。接收端收到后回复,hello,send。
这是发送端
package Udp编程;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author version 2.0
*/
public class receiveA {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象在9999端口监听,接收数据
DatagramSocket datagramSocket = new DatagramSocket(9999);
byte b[] = new byte[1024];
//创建DatagramPacket对象,准备接收传送的数据
DatagramPacket datagramPacket = new DatagramPacket(b, b.length);
//通过receive接收数据
datagramSocket.receive(datagramPacket);
//拆包
int n = datagramPacket.getLength();
byte[] bytes = datagramPacket.getData();
String s = new String(bytes,0,n);
System.out.println(s);
//将发送的数据封装到DatagramPacket对象中进行发送
byte b1[] = "hello send".getBytes();
datagramPacket = new DatagramPacket(b1, b1.length, InetAddress.getByName("192.168.1.3"),9998);
datagramSocket.send(datagramPacket);
datagramSocket.close();
}
}
这是接收端
package Udp编程;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @autho~~ version 2.0
*/
public class SendB {
public static void main(String[] args) throws IOException {
//构建 DatagramSocket对象在9998端口发送数据
DatagramSocket datagramSocket = new DatagramSocket(9998);
//将发送的数据转成字节数组
byte[] bytes = "hello,receive".getBytes();
//构建DatagramPacket对象将发送的数据封装
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.1.3"),9999);
//调用send方法进行发送
datagramSocket.send(datagramPacket);
byte[] bytes1 = new byte[1024];
//一个DatagramPacket 对象本身就可以实现同时接收和发送数据
datagramPacket = new DatagramPacket(bytes1, bytes1.length);
datagramSocket.receive(datagramPacket);
//拆包
int n = datagramPacket.getLength();
byte b[] = datagramPacket.getData();
String s = new String(b,0,n);
System.out.println(s);
datagramSocket.close();
}
}