1
UDP ==>User Datagram Protocol :用户数据包协议
1
面向无连接的协议发送端只管发送,不管接收端是否存在,同样接收端收到数据时,也不会向发送端反馈是否收到数据.
发送数据大小限制在64KB以内.
基于数据包传输数据:要将发送的内容,源和目的地封装到一个数据包,将数据包发送出去.
因为是面向无连接,速度快但不可靠.
即时通讯(QQ,微信,飞秋)
在线视频
网络语音电话
1
发送端代码实现
- 接收端代码实现//UDP协议发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /* * DatagramSocket():创建发送端的Socket对象. void send(DatagramPacket p):发送数据包 DatagramPacket(byte[]buf,int length,InentAddress address,int port):创建数据报包,buf表示接收的字节数组, length表示接受到的字节长度,address表示IP地址,port表示进程端口号. */ public class UDPOutput { public static void main(String[] args) throws IOException{ //创建发送端的Socket对象 DatagramSocket ds =new DatagramSocket(); /*DatagramPacket(byte[]buf,int length,InentAddress address,int port):创建数据报包,buf表示接收的字节数组, length表示接受到的字节长度,address表示IP地址,port表示进程端口号.*/ String buf ="好好学习,努力向上"; DatagramPacket data =new DatagramPacket(buf.getBytes(), buf.getBytes().length, InetAddress.getLocalHost(), 8087); //发送数据报包 ds.send(data); //释放资源 ds.close(); } }
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; /* * DatagramPacket(byte[]buf,int length)创建数据报包buf表示接受到的字节数组,length表示接受到的字节长度. DatagramSocket(int port):创建接收端的Socket对象并将其绑定本机指定的指定端口. void receive(DatagramPacket p):接受数据包 */ public class UDPInput { public static void main(String[] args) throws IOException { // 创建接收端的Socket对象并将其绑定本机指定的指定端口 DatagramSocket data = new DatagramSocket(64720); // 创建接收端的数据报包 byte[] buf = new byte[1024]; DatagramPacket p = new DatagramPacket(buf, buf.length); // 接收数据报包 data.receive(p); // 获取接收的数据报包中数据长度 int len = p.getLength(); System.out.println(len); // 打印接收到的数据 System.out.println(new String(buf, 0, len)); // 获取发动端的主机名和IP地址 String pathname = p.getAddress().getHostName(); String IP = p.getAddress().getHostAddress(); System.out.println(pathname); System.out.println(IP); // 获取发送端端口号 int port = p.getPort(); System.out.println(port); // 关闭资源,释放端口号 data.close(); }
}
1
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /* * DatagramSocket():创建发送端的Socket对象. DatagramSocket(int port):创建接收端的Socket对象并将其绑定本机指定的指定端口. void send(DatagramPacket p):发送数据包 void receive(DatagramPacket p):接受数据包 方法: DatagramPacket(byte[]buf,int length)创建数据报包buf表示接受到的字节数组,length表示接受到的字节长度. DatagramPacket(byte[]buf,int length,InentAddress address,int port):创建数据报包,buf表示接收的字节数组, length表示接受到的字节长度,address表示IP地址,port表示进程端口号. */ public class UDPOutputStream { public static void main(String[] args) throws IOException { //创建发送端的Socket对象 DatagramSocket data = new DatagramSocket(); //创建发送对象 String mun="好好学习java,学业有成之时来我公司上班!"; byte[]buf=addString(mun); //创建数据报包,若此IP地址为"192.168.137.255",则代表此网段"192.168.137.XXX"下的所有用户 //飞秋的进程端口默认是2425 DatagramPacket p =new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.137.1"),2425); //发送数据报包 data.send(p); //关闭资源, data.close(); } /* * 飞秋的信息发送格式: * "version:data:sender:IP:flag" * "版本号:发送时间:发送项目名称:发送端的IP地址:发送内容的标志位" */ public static byte[] addString(String mun) { //版本号 String version ="1.0:"; //发送时间 long data =System.currentTimeMillis(); //发送项目名称 String sender ="马化腾:"; //发送端的IP地址 String IP="000.000.1.1:"; //标志位,发送文本信息的标志位是:32 String flag ="32:"; String bString=version+data+":"+sender+IP+flag+mun; byte []buf=bString.getBytes(); return buf; } }