黑马程序员技术交流社区

标题: 【济南校区】UDP协议解析 [打印本页]

作者: 大山哥哥    时间: 2018-9-30 16:31
标题: 【济南校区】UDP协议解析
UDP协议全称是用户数据报协议 ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。我们接下来演示一下UDP是如何工作的.首先客户端的代码
[AppleScript] 纯文本查看 复制代码
public class SendDemo {
        public static void main(String[] args) throws IOException  {
                //创建发送端Socket对象
                DatagramSocket ds = new DatagramSocket();
                //创建数据并打包
                /*
                 * DatagramPacket :此类表示数据报包
                 * 数据 byte[]
                 * 设备的地址 ip
                 * 进程的地址  端口号
                   DatagramPacket(byte[] buf, int length, InetAddress address, int port)
                 */
               
                String s = "hello udp,im comming!";
                byte[] bys = s.getBytes();
                int length = bys.length;
                InetAddress address = InetAddress.getByName("itheima");//发送给当前设备
                int port = 8888;
                //打包
                DatagramPacket dp = new DatagramPacket(bys,length,address,port);
                //发送数据
                ds.send(dp);
                //释放资源
                ds.close();
        }
}


服务器端的代码
[AppleScript] 纯文本查看 复制代码
public class ReceiveDemo {
        public static void main(String[] args) throws IOException {
                //创建接收端Socket对象
                DatagramSocket ds = new DatagramSocket(8888);
                //接收数据
                //DatagramPacket(byte[] buf, int length)
                byte[] bys = new byte[1024];
                DatagramPacket dp = new DatagramPacket(bys,bys.length);
                               
                System.out.println(1);
                ds.receive(dp);//阻塞
                System.out.println(2);
               
                //解析数据
                //InetAddress getAddress() : 获取发送端的IP对象
                InetAddress address = dp.getAddress();
                //byte[] getData()  :获取接收到的数据,也可以直接使用创建包对象时的数组
                byte[] data = dp.getData();
                //int getLength()  :获取具体收到数据的长度
                int length = dp.getLength();
               
                //输出数据
                System.out.println("sender ---> " + address.getHostAddress());
                //System.out.println(new String(data,0,length));
                System.out.println(new String(bys,0,length));
                //释放资源
                ds.close();

        }
}

希望多广大黑马人有所裨益.











欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2