• TCP和UDP


    一、InetAddress 类:封装一个IP 的对象
      常用方法:
        getByName(String host):封装一个指定ip获取指定域名的对象 静态 返回 InetAddress 对象
        getLocalHost():封装本机的ip对象 静态 返回 InetAddress 对象
        getHostName():获取主机名
        getHostAddress():获取ip地址
    二、UDP 通信
      1、DatagramPacket 类
        构造方法:DatagramPacket(byte[] buf,int length):用来接收数据
             DatagramPacket(byte[] buf,int length,InetAddress address,int port):发送指定长度数组,到指定ip的指定端口号
        常用方法:getAddress():获取机器的IP地址,此数据发送到哪台机器或者从哪台接收
             getPort():获取机器的端口号,此数据发送到哪台机器或者从哪台接收
             getDate():获取传输的数据
             getLength():获取数据的长度
      2、DatagramSocket 类
        构造方法:DatagramSocket():发送数据时使用该构造
             DatagramSocket (int port):接收数据时使用该构造
        常用方法:
             send(DatagramPacket p):发送数据报包
             receive(DategramPacket p):接收数据报包
      3、使用UDP通信

      接收端:

     1 public static void main(String[] args) throws IOException {
     2 //        创建 DatagramSocket 对象 用于 获取数据报包 并指 明端口号
     3         DatagramSocket ds = new DatagramSocket(8888);
     4         byte[] bytes = new byte[1024];
     5         while(true) {
     6 //            创建 DatagramPacket 对象 用于拆包
     7             DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
     8 //            获取数据
     9             ds.receive(dp);
    10 //            获取发送者的ip和主机名和端口号
    11             String ip = dp.getAddress().getHostAddress();
    12             String name = dp.getAddress().getHostName();
    13             int port = dp.getPort();
    14 //            获取数据
    15             byte[] data = dp.getData();
    16 //            将数据转字符串
    17             System.out.println("ip为" + ip + "端口号为" + port + "发送的消息是" + new String(data, 0, data.length));
    18         }
    19 //        反复接收的不关闭,不反复的时候关闭
    20 //        ds.close();
    21     }

      发送端:

     1     public static void main(String[] args) throws IOException {
     2 //        byte[] bytes = "你好呀!".getBytes();
     3 
     4 //        明确ip地址
     5         InetAddress inet = InetAddress.getByName("127.0.0.1");
     6 //         发送数据
     7         DatagramSocket ds = new DatagramSocket();
     8         while (true) {
     9 //            将需要发送的数据转字符串
    10             byte[] bytes = new Scanner(System.in).next().getBytes();
    11 
    12 //            打包
    13             DatagramPacket dp = new DatagramPacket(bytes, bytes.length, inet, 8888);
    14 //            开始发送
    15             ds.send(dp);
    16         }
    17 //        反复发送的不关闭,不反复的时候关闭
    18 //        ds.close();
    19     }



    三、TCP通信
      1、ServerSocket 类 服务器端
        构造方法:ServerSocket(int port);
        常用方法:accept():获取 Socket 对象
             getInetAddress():返回服务器接收的本地地址
      2、Socket 类 客户端
        构造方法:Socket(String host,int port):指定地址和指定端口号
             Socket(InetAddress address,int port):指定 InetAddress 对象和端口号
        常用方法:getPort():获取 Socket对象与服务器端连接的端口号
             getLocalAddress():获取本机的 InetAddress 对象
             close():释放资源
             getInputStream():获取字节输入流,数据存在该流中
             getOutputStream():获取字节树池流,需要发送的数据写入到该流中
    3、TCP通信

      服务器端:

     1 public static void main(String[] args) throws IOException {
     2 //        创建服务器对端对象
     3         ServerSocket ss = new ServerSocket(6666);
     4 
     5 //        获取 socket 对象
     6         Socket socket = ss.accept();
     7 //        从 socket 对象中获取 字节输入流
     8         InputStream is = socket.getInputStream();
     9 //        获取字节输出入流的数据
    10 
    11         byte[] bytes = new byte[1024];
    12 //        int len = is.read(bytes);
    13 //        System.out.println(new String(bytes, 0, len));
    14 //        将 数组转字符串
    15         int len = 0;
    16         while ((len = is.read(bytes)) != -1) {
    17             System.out.println(new String(bytes, 0, len));
    18         }
    19         
    20 //        服务器端给客户端相应
    21 
    22 //        获取字节输出流,写给客户端相应
    23         OutputStream out = socket.getOutputStream();
    24 //        写数据    
    25         out.write("服务端收到了".getBytes());
    26         socket.shutdownOutput();
    27 //        释放资源
    28         ss.close();
    29     }

      客户端:

     1 public static void main(String[] args) throws UnknownHostException, IOException {
     2         InetAddress inet = InetAddress.getByName("127.0.0.1");
     3 //        创建客户端 Socket 对象
     4         Socket socket = new Socket(inet, 6666);
     5 //        从 客户端 对象 获取 字节输出流,用于传输数据给客户端
     6         OutputStream out = socket.getOutputStream();
     7         out.write("你好".getBytes());
     8 
     9         socket.shutdownOutput();
    10 
    11 //        接收服务器的回应
    12 
    13 //        获取字节输入流 接收服务端给的响应数据
    14         InputStream is = socket.getInputStream();
    15         byte[] bytes = new byte[1024];
    16 //        int len = is.read(bytes);
    17 //        System.out.println(new String(bytes, 0, len));
    18 
    19         int len = 0;
    20         while ((len = is.read(bytes)) != -1) {
    21             System.out.println(new String(bytes, 0, len));
    22         }
    23 
    24 //        释放资源
    25         socket.close();
    26     }
  • 相关阅读:
    Fiddler的使用详解
    FiddlerScript编写
    Fiddler请求及面板
    fiddler抓包时候的 tunnel to是什么意思
    doris 注意事项
    centos 安装python3
    electron9版本升级到12
    Asp.net Web API 解决跨域
    Microsoft Edge WebView2初体验
    .NET WebApi Delete error HTTP 错误 405.0 Method Not Allowed
  • 原文地址:https://www.cnblogs.com/yanghaoyu0624/p/11759888.html
Copyright © 2020-2023  润新知