UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。(无连接、封包、大小限制、速度快)。
一、UDP协议的特点:
二、通俗解释:
面向无连接的,你在与不在我都在发。就像邮局寄包裹,比如寄饼干。,邮局会给你一个盒子和胶带,你将饼干封上(封包),将数据达成数据包,打完之后,贴张地址(天堂街)、门牌号(地狱门18号)(地址、端口),但地址可能不存在,那么则丢弃。
三、UDP举例:
步话机、FEIQ、网络会议、录屏传播、聊天。
四、socket(套接字):
Socket就是为网络服务提供的一种机制。通信的两端都有Socket。(插座,初期可简单理解为应用程序,而非网卡接口)网络通信其实就是Socket通信。数据在两个Socket间通过IO传输。
五、发送端:
需求:通过Udp传输的方式,将一段文字数据发送出去。定义了一个udp的接收端。思路:1、建立udpSocket服务(找邮局)2、提供数据,将数据封装到数据包中(封包、写地址)3、通过socket服务发送功能,将数据包发送出去。(包裹上路)4、关闭资源。
1 class UdpSend 2 { 3 public static void main(String[] args) throws Exception 4 { 5 //1、创建udpSocket服务。通过DatagramSocket对象 6 DatagramSocket ds=new DatagramSocket(8888); 7 8 //2、确定数据,并封装数据包 9 byte[] buf="udp I coming".getBytes();10 11 /*12 InetAddress addr=InetAddress.getLocalHost();13 InetAddress addr = InetAddress.getByName(null);14 InetAddress.getByName("localhost");15 InetAddress.getByName("127.0.0.1");16 */17 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.102"),10000);18 19 //3、通过socket服务,将已有的数据包发送出去,通过send方法20 ds.send(dp);21 22 //4、关闭资源23 ds.close();24 }25 }发送端程序代码(class UdpSend )
六、接收端:
需求:定义一个应用程序,用于接收udp协议传输的数据并处理定义udp的接收端。思路:1、定义udpSocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义一个数字标识,方便于明确哪些数据过来,该应用程序可以处理。2、定义一个数据包。因为要存储接收到的字节数据。数据包对象中有更多功能可以提取字节数据中的不同数据信息。3、通过socket服务端额receive方法将收到的数据存入已定义的数据包中4、通过手机开那片对象的特有功能,将这些不同数据取出打印在控制台上。5、关闭资源
1 class UdPReceive 2 { 3 public static void main(String[] agrs) throws Exception 4 { 5 //1、创建udpsocket,建立端点 6 DatagramSocket ds=new DatagramSocket(10000); 7 8 //2、定义数据包,用于存储数据 9 byte[] buf=new byte[1024];10 DatagramPacket dp=new DatagramPacket(buf,buf.length);11 12 //3、通过receive方法将收到的数据存到数据包 中13 ds.receive(dp);//阻塞式方法,线程机制,wait了14 15 //通过数据包的方法获取其中的数据16 String ip=dp.getAddress().getHostAddress();//获取发送端IP地址17 String data=new String(dp.getData(),0,dp.getLength());//获取数据18 int port=dp.getPort();//获取发送端端口19 20 System.out.println(ip+"::"+data+"::"+port);//信息打印控制台21 22 //5、关闭资源23 ds.close();24 }25 }接收端程序代码(class UdpReceive)
运行截图:
七、在接收者与发送者之间的改进
承接UdpDemo.java,实现只能一个人发,一个人收。1、实现键盘录入:2、实现连续输入(while)
1 import java.net.*; 2 import java.io.*; 3 4 class UdpSend2 5 { 6 public static void main(String[] args) throws Exception 7 { 8 DatagramSocket ds=new DatagramSocket(); 9 10 //实现键盘录入11 BufferedReader bufr=12 new BufferedReader(new InputStreamReader(System.in));13 String line=null;14 15 while ((line=bufr.readLine())!=null)16 {17 if ("886".equals(line))18 break;19 byte[] buf=line.getBytes();20 21 //IP地址,暂且用本机IP地址,也可用广播地址192.168.1.25522 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.102"),10001);23 24 ds.send(dp);25 }26 ds.close();27 }28 }29 30 31 class UdpReceive232 {33 public static void main(String[] agrs) throws Exception34 {35 DatagramSocket ds=new DatagramSocket(10001);36 37 byte[] buf=new byte[1024];38 DatagramPacket dp=new DatagramPacket(buf,buf.length);39 40 while (true)41 {42 ds.receive(dp);//阻塞式方法,线程机制,wait了43 44 String ip=dp.getAddress().getHostAddress();//获取发送端IP地址45 String data=new String(dp.getData(),0,dp.getLength());//获取数据46 int port=dp.getPort();//获取发送端端口47 48 System.out.println(ip+"::"+data+"::"+port);//信息打印控制台49 }50 51 //ds.close();服务器一般不关,也有种方法,while判断条件关52 }53 }发送端+接收端Code
运行截图:
新闻热点
疑难解答