Java高级Day37-UDP网络编程

[复制链接]
发表于 2026-1-25 22:35:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
109.netstat指令


  •         netstat -an 可以查察当前主机网络情况,包罗端口监听情况和网络毗连情况
  •         netstat -an|more 可以分页表现
  •         要求在dos控制台下实行
阐明:

  •         LISTENING表现某个端口在监听
  •         如果有一个外部步调(客户端)毗连到该端口,就会表现一条毗连信息
  •         ctrl + c 退出指令
110.TCP毗连秘密

1.当客户端毗连到服务器后,现实上客户端也是通过一个端口的服务端举行通讯的,这个端口是TCP/IP来分配的,不确定的,随机的
2.表现图

3.步调验证
111.UDP网络通讯编程

根本信息

  •         类 DatagramSocket和 DatagramPacket[数据报/数据包] 实现了基于UDP 协议网络步调
  •         UDP数据通过数据报套接字 DatagramSocket 发送和吸收,体系不包管UDP数据报肯定可以或许安全送到目标地,也不能确定什么时间可以抵达
  •         DatagramPacket 对象封装了UDP数据报,在数据报中包罗了发送端的IP地点和端标语以及吸收端的IP地点和端标语
  •         UDP协议中每隔数据报都给出了完备的地点信息,因此无需创建发送方和吸收方的毗连
根本流程

  •         焦点的两个类/对象 DatagramSocket与DatagramPacket
  •         创建发送端,吸收端(没有服务端和客户端概念)
  •         发送数据前,创建数据包/报 DatagramPacket对象
  •         调用DatagramSocket的发送,吸收方法
  •         关闭DatagramSocket
UDP阐明:

  •         没有明确的服务端和客户端,演酿成数据的发送端和吸收端
  •         吸收数据和发送数据是通过 DatagramSocket 对象完成
  •         将数据封装到 DatagramPacket 对象/包装
  •         当吸收到 DatagramPacket 对象,须要举行拆包,取出数据
  •         DatagramSocket 可以指定在哪个端口吸收数据
应用案例:
  1. //1.编写一个接收端A和一个发送端B
  2. //2.接收端A在9999端口等待接收数据(receive)
  3. //3.发送端A向接收端B 发送数据“hello,明天吃火锅~”
  4. //4.接收端B接收到发送端A发送的数据,回复“好的,明天见”再退出
  5. //5.发送端接收回复的数据,再退出
  6. ​
  7. ===============//ReceiverA//===============
  8. public class UDPReceiverA {
  9.    public static void main(String[] args) throws Exception {
  10.        //1.创建一个DatagramSocket对象,准备在9999端口接收数据
  11.        DatagramSocket socket = new DatagramSocket(9999);
  12.        //2.构造一个 DatagramPacket对象
  13.        //  一个数据包,最大是64k
  14.        byte[] buf = new byte[64 * 1024];
  15.        DatagramPacket packet = new DatagramPacket(buf, buf.length);
  16.        //3.调用 接受方法,将通过网络传输的 DatagramPacket对象填充到packet对象
  17.        //  当有数据包发送到9999端口时,就会接收到数据,如果没有数据包发送到,就会阻塞等待
  18.        System.out.println("接收端A 等待接收数据..");
  19.        socket.receive(packet);
  20.        //4.可以把packet进行拆包,取出数据,并显示
  21.        int length = packet.getLength();//实际接收到的数据字节长度
  22.        byte[] data = packet.getData();//接收到数据
  23.        String s = new String(data, 0, length);
  24.        System.out.println(s);
  25.        
  26.        //==回复信息给B端
  27.        //将需要发送的数据,封装到DatagramPacket对象
  28.        data = "好的,明天见".getBytes();
  29.        //封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口
  30.        packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(),9998);
  31.        socket.send(packet);//发送
  32.        //5.关闭资源
  33.        socket.close();
  34.    }
  35. }
  36. ​
  37. ​
  38. ​
  39. ===============//SenderB//===============
  40. public class UDPSenderB {
  41.    public static void main(String[] args) throws Exception {
  42.        //1.创建 DatagreamSocket 对象,准备在9998端口 接收数据
  43.        DatagramSocket socket = new DatagramSocket(9998);//同一个机器没有两个相同的端口,所以用9998
  44.        //2.将需要发送的数据,封装到DatagramPacket对象
  45.        byte[] data = "hello 明天吃火锅~".getBytes();
  46.        //封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口
  47.        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(),9999);
  48.        socket.send(packet);
  49.        //3.==接收从A端回复的信息
  50.        //  (1)构造一个 DatagramPacket对象
  51.        //  一个数据包,最大是64k
  52.        byte[] buf = new byte[64 * 1024];
  53.        packet = new DatagramPacket(buf, buf.length);
  54.        //  (2)调用 接受方法,将通过网络传输的 DatagramPacket对象填充到packet对象
  55.        //  当有数据包发送到9998端口时,就会接收到数据,如果没有数据包发送到,就会阻塞等待
  56.        socket.receive(packet);
  57.        //  (3)可以把packet进行拆包,取出数据,并显示
  58.        int length = packet.getLength();//实际接收到的数据字节长度
  59.        data = packet.getData();//接收到数据
  60.        String s = new String(data, 0, length);
  61.        System.out.println(s);
  62.        //关闭资源
  63.        socket.close();
  64.        System.out.println("B端退出");
  65.    }
  66. }  
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表