zoukankan      html  css  js  c++  java
  • 网络编程(UDP传输)

     UDP

      * 面向无连接,数据不安全,速度快。不区分客户端与服务端。
     TCP
      * 面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
      * 三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

    网络编程(UDP传输)
    * 1.发送Send
        * 创建DatagramSocket, 随机端口号
        * 创建DatagramPacket, 指定数据, 长度, 地址, 端口
        * 使用DatagramSocket   发送DatagramPacket
        * 关闭DatagramSocket
    * 2.接收Receive
        * 创建DatagramSocket, 指定端口号
        * 创建DatagramPacket, 指定数组, 长度
        * 使用DatagramSocket接收DatagramPacket
        * 关闭DatagramSocket
        * 从DatagramPacket中获取数据
    * 3.接收方获取ip和端口号
        * String ip = packet.getAddress().getHostAddress();
        * int port = packet.getPort();
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.Socket;
    import java.net.SocketException;
    
    import javax.xml.ws.handler.MessageContext.Scope;
    
    public class demon1_receive {
    
        public static void main(String[] args) throws Exception {
            DatagramSocket socket = new DatagramSocket(6666);                    //   创建码头   指定端口号  6666
            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);     //    创建集装箱,  定义集装箱大小为1024个字节
            socket.receive(packet);          // 接货      
            byte[] arr = packet.getData();         //  获取数据  getdata()
            int len = packet.getLength();          // 获取有效字节个数
            System.out.println(new String(arr,0,len));        //转换成字符串
            socket.close(); 
        }
    }
    public class demon1_send {
        /*
         * 1.发送Send
        * 创建DatagramSocket, 随机端口号
        * 创建DatagramPacket, 指定数据, 长度, ip地址, 端口
        * 使用DatagramSocket发送DatagramPacket
        * 关闭DatagramSocket
         */
        public static void main(String[] args) throws Exception {
            String str = "弄啥呢";
            DatagramSocket socket = new DatagramSocket();
            DatagramPacket packet = 
                    new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("localhost"), 6666);
            /* DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
                                构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
               InetAddress  此类表示IP地址 ( 32 位或 128 位无符号数字)
               getByName(String host)  :在给定主机名的情况下确定主机的 IP 地址。
            
            *
            */
            socket.send(packet);   //发送
            socket.close();
        }
    
    }
    public class demon2_receive {
    
        public static void main(String[] args) throws Exception {
            DatagramSocket socket = new DatagramSocket(6666);
            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
            while (true) {        
                socket.receive(packet);          // 接货
                byte[] arr = packet.getData();         //  获取数据  getdata()
                int len = packet.getLength();          // 获取有效字节个数
                String ip = packet.getAddress().getHostName();
                // getAddress()  获取一个 InetAddress 类型的 IP地址    再getHostAddress()  返回 IP 地址字符串(以文本表现形式)。
                  
                int port = packet.getPort();      //获取端口号
                System.out.println(ip + ".." + port + ":" + new String(arr,0,len));        //转换成字符串
            }
            // socket.close(); 
        }
    
    }
    public class demon2_send {
        /*
         * 1.发送Send
        * 创建DatagramSocket, 随机端口号
        * 创建DatagramPacket, 指定数据, 长度, 地址, 端口
        * 使用DatagramSocket发送DatagramPacket
        * 关闭DatagramSocket
         */
        public static void main(String[] args) throws Exception {
            Scanner sc = new Scanner(System.in);    
            DatagramSocket socket = new DatagramSocket(9999);
            while(true){
                String str = sc.nextLine();
                if ("quit".equals(str)) {
                    break;
                }
                DatagramPacket packet = 
                        new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("localhost"), 6666);
                socket.send(packet);
            
            }
            socket.close();
        }
    
    }
    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    性能测试培训:性能瓶颈分析思路
    (国内)完美下载Android源码Ubuntu版
    (国内)完美下载android源代码(文章已经丢失)
    【翻译】Ext JS最新技巧——2015-10-21
    ubuntu 中 eclipse 的菜单栏 显示问题
    谷歌代码库已超过 20 亿行代码,他们是如何管理的?
    架构方面的资料集锦
    Android Studio 使用 Gradle 打包 Jar
    【翻译】Ext JS最新技巧——2015-8-11
    【翻译】在Ext JS 6通用应用程序中使用既共享又特定于视图的代码
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11357777.html
Copyright © 2011-2022 走看看