• 毕向东udp学习笔记2


    项目功能:

     发送端读取控制台输入,然后udp发送

    接收端一直接收,直到输入为886

     

    相对于笔记1,修改了发送端代码,实现发送控制台的内容,接收端循环接收,当输入886时,停止发送

    发送端:

    import java.net.*;
    import java.io.*;
    
    public class udpSend2
    {
        /*
         *记得抛异常
        */
        public static void main(String[] args) throws IOException{
            
            System.out.println("发送端启动...");
            /*
            *创建UDP传输的发送端
            * 思路:
            * 1.建立udp的socket服务(new socket)
            * 2,将要发送的数据封装到数据包中。(packet)
            * 3,通过udp的socket服务将数据包发送出去(send)
            * 4,关闭socket服务(close)
    
            **抛一个大异常:IOException
            */
    
            //1.udpsocket服务对象,使用DatagramSocket创建,可以指明本地IP和端口
            DatagramSocket ds = new DatagramSocket(8888);
    
            //2.将要发送的数据封装到数据包中
            //String str ="udp传输,哥们,我是客户端";
            //使用控制台输入
            BufferedReader bufr = new  BufferedReader(new InputStreamReader(System.in));
            String line =null;
    
            while((line=bufr.readLine())!=null){
    
                byte[] buf =line.getBytes();
                DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.103"),10000);
    
                ds.send(dp);
                //如果输入内容是"886",跳出循环
                if("886".equals(line))
                    break;
            }
    
            //4.关闭连接
            ds.close();
    
            
        }
    }

    接收端:

     1 import java.net.*;
     2 import java.io.*;
     3 
     4 public class udpRecv2
     5 {
     6     /*
     7     * 创建UDP传输的接收端
     8     * 1.建立udp socket服务,因为是要接收数据,必须指明端口号
     9     * 2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法处理数据
    10     * 3,使用socket服务的receive方法将接收的数据存储到数据包中
    11     * 4,通过数据包的方法解析数据包中的数据
    12     * 5,关闭资源
    13 
    14     *抛一个大异常:IOException
    15     */
    16     public static void main(String[] args) throws IOException{
    17         //1,创建udp socket服务
    18         DatagramSocket ds = new DatagramSocket(10000);
    19         //一直循环接收,直到886时退出(注意:ds的创建必须写在循环外面)
    20         while(true)
    21         {
    22             //2,创建数据包
    23             byte[] buf =new byte[1024];
    24             DatagramPacket dp =new DatagramPacket(buf,buf.length);
    25 
    26             //3,使用接收的方法将数据包存储到数据包中
    27             ds.receive(dp);//阻塞式
    28 
    29             //4.通过数据包对象的方法,解析其中的数据,比如端口,地址,内容等
    30             String ip = dp.getAddress().getHostAddress();
    31             int port  = dp.getPort();
    32             String content = new String(dp.getData(),0,dp.getLength());
    33             System.out.println(ip+"::" +port+":"+content);
    34             if(content.equals("886")){
    35                 System.out.println(ip+"退出聊天室"); 
    36                 break;
    37             }
    38 
    39         }
    40         //5关闭资源
    41         ds.close();
    42 
    43     }
    44 }

    效果:

    发送端:

    接收:

  • 相关阅读:
    更新 anaconda
    spyder 每次运行前,清除上一次运行的变量
    vscode 无法使用 jupyter notebook
    vscode 关闭当前光标所在变量自动高亮
    vscode 关闭侧边栏中 git source control 的更改数目
    【java】Java组件概览(1)
    【java】字符串处理技巧记录
    【异常处理】Spring项目异常如何做异常处理
    【Springboot】Springboot学习(转)
    【微服务】微服务(转)
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/4928148.html
Copyright © 2020-2023  润新知