网络编程(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();
    }

}
竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
原文地址:https://www.cnblogs.com/yaobiluo/p/11357777.html