zoukankan      html  css  js  c++  java
  • 网络编程2-UDP编程(DatagramSocket)

    1、传输层有两个协议,一个是tcp协议,另一个是udp协议,tcp协议通过socket编程。udp通过数据报编程。

    UDP协议:

      (1)将数据、源地址、目的地址 封装成数据包,不需要建立链接

      (2)每个数据包限制在64K以内

      (3)不可靠

      (4)无需释放资源,速度快

    2、(1)类DatagramSocket和DatagramPacket可实现udp编程

      (2)DatagramPacket(数据包)里面装有,发送者地址,接收者地址,端口,和数据,DatagraSocket发送数据包

      (3)系统不保证能否把数据送达目的地,也不一定什么时候到达

      (4)数据包,有发送者接收者地址,所以发送前不用建立连接,不需要三次握手。

    3、例子,注意事项在离子里面

    package com.udp.test;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    
    import org.junit.Test;
    
    public class TestUDP {
        private static String SERVER_HOST = "127.0.0.1";
        
        //发送端(和socket的客户端注意区别)
        @Test
        public void send(){
            //1、创建DatagramSocket对象
            DatagramSocket ds = null;
            try {
                ds = new DatagramSocket();
                //2、获取要传输的信息,创建数据包对象
                byte [] b = "Hello I am UDP test".getBytes();
                DatagramPacket dp = new DatagramPacket(b, 0, b.length,InetAddress.getByName(SERVER_HOST),8090);
                //3、发送数据包
                ds.send(dp);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                //4、关闭socket连接
                if(ds != null){
                    ds.close();
                }
            }
        }
        
        //接受端(和socket的服务端区别)
        @Test
        public void receive(){
            //1、创建DatagramSocket对像
            DatagramSocket ds = null;
            try {
                ds = new DatagramSocket(8090);
                //2、创建数据包对象
                byte [] b = new byte[64];
                DatagramPacket dp = new DatagramPacket(b,0,b.length);
                //3、接收
                ds.receive(dp);
                //4、存到字符串dp.getData()方法
                String str = new String(dp.getData(),0,dp.getData().length);
                System.out.println(str);
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                
                //5、关闭ds
                if(ds != null ){
                    ds.close();
                }
                
                
            }
            
        }
    }
  • 相关阅读:
    Java——Spring MVC数据绑定
    Java——Spring MVC环境配置
    IDEA创建maven web工程
    Java——JDBC Template
    Java——基于AspectJ的AOP开发
    Java——Spring AOP
    JDK12不包含JAXB-API
    [转载]Docker容器无法被stop or kill问题
    常用工具/代码库
    Docker常用yml
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5060028.html
Copyright © 2011-2022 走看看