zoukankan      html  css  js  c++  java
  • 网络编程-UDP

    代码部分--UDP传输

    * 1.发送Send

           * 创建DatagramSocket, 随机端口号

           * 创建DatagramPacket, 指定数据, 长度, 地址, 端口

           * 使用DatagramSocket发送DatagramPacket

           * 关闭DatagramSocket

    package demo1;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    
    public class Test_send {
        /** 1.发送Send
        * 创建DatagramSocket, 随机端口号
        * 创建DatagramPacket, 指定数据, 长度, 地址, 端口
        * 使用DatagramSocket发送DatagramPacket
        * 关闭DatagramSocket
         * @throws SocketException */
    public static void main(String[] args) throws Exception {
        //定义要传输的字符串
        String str="hahhah";
        //创建socket
        DatagramSocket socket=new DatagramSocket();
        //创建packet()
        DatagramPacket packet =new DatagramPacket(str.getBytes(),
                str.getBytes().length,InetAddress.getByName("127.0.0.1"),6666);
        //发送数据
        socket.send(packet);
        //关闭socket
        socket.close();
        
    }
    }

    * 2.接收Receive

           * 创建DatagramSocket, 指定端口号

           * 创建DatagramPacket, 指定数组, 长度

           * 使用DatagramSocket接收DatagramPacket

           * 关闭DatagramSocket

           * 从DatagramPacket中获取数据

    package demo1;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class Test_receiver {
        /** 创建DatagramSocket, 指定端口号
        * 创建DatagramPacket, 指定数组, 长度
        * 使用DatagramSocket接收DatagramPacket
        * 关闭DatagramSocket
        * 从DatagramPacket中获取数据
         * @throws Exception */
    
    public static void main(String[] args) throws Exception {
        //创建socket相当有码头
        DatagramSocket socket=new DatagramSocket(6666);
        //创建packet相当于集装箱
        DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
        //获取数据
        socket.receive(packet);
        //关闭socket
        socket.close();
        //从packet中取出数据
        byte[] data=packet.getData();
        System.out.println(new String(data,0,packet.getLength()));
        
        
    }
    }

    UDP传输优化(不断的发送,接收)

    package demo1;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.Scanner;
    
    public class Test_send {
        /**
         * 1.发送Send 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口
         * 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket
         * 
         * @throws SocketException
         */
        public static void main(String[] args) throws Exception {
            Scanner in = new Scanner(System.in);
            // 创建socket
            DatagramSocket socket = new DatagramSocket();
            while (true) {
                String line = in.nextLine();
                if ("quit".equals(line)) {
                    break;
                } else {
                    // 创建packet()
                    DatagramPacket packet = new DatagramPacket(line.getBytes(),
                            line.getBytes().length,
                            InetAddress.getByName("127.0.0.1"), 6666);
                    // 发送数据
                    socket.send(packet);
                }
            }
            // 关闭socket
            socket.close();
    
        }
    }
    package demo1;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class Test_receiver {
        /** 创建DatagramSocket, 指定端口号
        * 创建DatagramPacket, 指定数组, 长度
        * 使用DatagramSocket接收DatagramPacket
        * 关闭DatagramSocket
        * 从DatagramPacket中获取数据
         * @throws Exception */
    
    public static void main(String[] args) throws Exception {
        //创建socket相当有码头
        DatagramSocket socket=new DatagramSocket(6666);
        //创建packet相当于集装箱
        DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
        while(true)
        {
            //获取数据
            socket.receive(packet);
            //从packet中取出数据
            byte[] data=packet.getData();
            //获取ip
            String ip=packet.getAddress().getHostAddress();
            System.out.println("ip:"+ip+"  :"+new String(data,0,packet.getLength()));
        }
        
        
        
    }
    }

     

    * 3.接收方获取ip和端口号 

           * String ip = packet.getAddress().getHostAddress();

           * int port = packet.getPort();

    UDP传输优化(多线程)

     

    package demo1;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.Scanner;
    
    public class Test_send {
        /**
         * 1.发送Send 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口
         * 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket
         * 
         * @throws SocketException
         */
        public static void main(String[] args) throws Exception {
            new Receive().start();
            new Send().start();
        }
    }
    
    class Send extends Thread
    {
        public void run()
        {
            try {
            Scanner in = new Scanner(System.in);
            // 创建socket
            DatagramSocket socket;
            
                socket = new DatagramSocket();
            
            while (true) {
                String line = in.nextLine();
                if ("quit".equals(line)) {
                    break;
                } else {
                    // 创建packet()
                    DatagramPacket packet = new DatagramPacket(line.getBytes(),
                            line.getBytes().length,
                            InetAddress.getByName("127.0.0.1"), 9999);
                    // 发送数据
                    socket.send(packet);
                }
            }
            // 关闭socket
            socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    class Receive extends Thread
    {
        public void run()
        {
            
            try {
                //创建socket相当有码头
                DatagramSocket socket=new DatagramSocket(9999);
                //创建packet相当于集装箱
                DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
                while(true)
                {
                    //获取数据
                    socket.receive(packet);
                    //从packet中取出数据
                    byte[] data=packet.getData();
                    //获取ip
                    String ip=packet.getAddress().getHostAddress();
                    System.out.println("ip:"+ip+"  :"+new String(data,0,packet.getLength()));
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    UDP优化-GUI界面聊天(显示+关闭+发送)

     界面

    代码实现

    package demo2;
    
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class GUIDemo extends Frame {
        TextField ip;
        Button send;
        Button log;
        Button clear;
        Button shake;
        TextArea show;
        TextArea edit;
        DatagramSocket socket;
    
        /**
         * 窗体的初始化
         */
        public GUIDemo() {
            // 基本控件的初始化
            init();
            try {
                socket = new DatagramSocket();
            } catch (SocketException e) {
                e.printStackTrace();
            }
            // 南边panel的初始化
            sourceMade();
            // 中间panel的初始化
            centerMade();
            // 事件添加
            event();
        }
    
        /**
         * 中间panel构建
         */
        public void centerMade() {
            Panel center = new Panel();
            center.setLayout(new BorderLayout());
            show = new TextArea();
            show.setEditable(false);
            show.setFont(new Font("xxx", Font.PLAIN, 15));
            edit = new TextArea();
            edit.setFont(new Font("xxx", Font.PLAIN, 15));
            center.add(show, BorderLayout.CENTER);
            center.add(edit, BorderLayout.SOUTH);
            this.add(center, BorderLayout.CENTER);
    
        }
    
        /**
         * 南边窗体初始化
         */
        public void sourceMade() {
            Panel source = new Panel();
            ip = new TextField(15);
            ip.setText("127.0.0.1");
            send = new Button("发送");
            log = new Button("记录");
            clear = new Button("清屏");
            shake = new Button("震动");
            source.add(ip);
            source.add(send);
            source.add(log);
            source.add(clear);
            source.add(shake);
            this.add(source, BorderLayout.SOUTH);
        }
    
        public void init() {
            this.setLocation(500, 500);
            this.setSize(400, 600);
            new Receive().start();
            this.setVisible(true);
        }
    
        public void event() {
            // 关闭窗体事件
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    socket.close();
                    System.exit(0);
                }
            });
    
            // 发送事件
            send.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        send();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
    
            });
    
            // 记录事件
    
            // 清屏事件
    
            // 震动事件
    
        }
    
        public void send() throws IOException {
    
            String message = edit.getText();
            String host = ip.getText();
            DatagramPacket packet = new DatagramPacket(message.getBytes(),
                    message.getBytes().length, InetAddress.getByName(host), 9999);
            socket.send(packet);
    
            String time = getCurrentTime();
            show.append(time + "我对" + host + "说:
    " + message + "
    
    ");
            edit.setText("");
        }
    
        private String getCurrentTime() {
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            return sdf.format(date);
        }
    
        public static void main(String[] args) {
            GUIDemo demo = new GUIDemo();
        }
    
        private class Receive extends Thread {
            public void run() {
                try {
                    DatagramSocket socket = new DatagramSocket(9999);
                    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
                    while (true) {
                        socket.receive(packet);
                        String message = new String(packet.getData(), 0,
                                packet.getLength());
                        String time = getCurrentTime();
                        String ipstr = packet.getAddress().getHostAddress();
                        show.append(time + " " + ipstr + " 对我说:
    " + message
                                + "
    
    ");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
            }
        }
    
    }

     

    UDP优化-GUI界面聊天(记录+清屏+震动)

    清屏

            clear.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    show.setText("");
                }
    
            });

    记录

    // 记录事件
            log.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        logFile();
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
    
            });
    public void logFile() throws Exception {
            bw.flush();
            //获取输入流
            FileInputStream fis=new FileInputStream("src/log.txt");
            //创建缓冲区
            ByteArrayOutputStream baos=new ByteArrayOutputStream();
            int len;
            byte arr[]=new byte[8192];
            while((len=fis.read(arr))!=-1)
            {
                baos.write(arr,0,len);
            }
            String str=baos.toString();
            show.setText(str);
            
            
        }

    震动

            // 震动事件
            shake.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        send(new byte[]{-1},ip.getText());
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            });
        public void shake() {
            int x=getLocation().x;
            int y=getLocation().y;
            for(int i=0;i<3;i++)
            {
                try {
                    this.setLocation(x+10,y+10);
                    Thread.sleep(20);
                    this.setLocation(x+10,y-10);
                    Thread.sleep(20);
                    this.setLocation(x-10,y+10);
                    Thread.sleep(20);
                    this.setLocation(x-10,y-10);
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            this.setLocation(x,y);
        }

    UDP优化-GUI界面聊天(快捷键)

    //快捷键发送
            edit.addKeyListener(new KeyAdapter() {
                @Override
                public void keyReleased(KeyEvent e) {
                    //CTRL+回车====》发送信息
                    if(e.getKeyChar()==KeyEvent.VK_ENTER && e.isControlDown())
                    {
                        try {
                            send();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    }
                }
                
            });

    UDP优化-GUI界面聊天(代码优化)

        
        public void send() throws IOException {
    
            String message = edit.getText();
            String host = ip.getText();
            host=((host.trim().length()==0)?"255.255.255.255":host);
            DatagramPacket packet = new DatagramPacket(message.getBytes(),
                    message.getBytes().length, InetAddress.getByName(host), 9999);
            socket.send(packet);
    
            String time = getCurrentTime();
            host=(("255.255.255.255").equals(host)?"所有人":host);
            String str = time + "我对" + host + "说:
    " + message + "
    
    ";
            show.append(str);
            bw.append(str);
            edit.setText("");
        }

    完整代码

    package demo2;
    
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.BufferedWriter;
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    
    public class GUIDemo extends Frame {
        TextField ip;
        Button send;
        Button log;
        Button clear;
        Button shake;
        TextArea show;
        TextArea edit;
        DatagramSocket socket;
        BufferedWriter bw;
    
        /**
         * 窗体的初始化
         */
        public GUIDemo() {
            // 基本控件的初始化
            init();
            try {
                socket = new DatagramSocket();
                bw=new BufferedWriter(new FileWriter("src/log.txt",true));
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 南边panel的初始化
            sourceMade();
            // 中间panel的初始化
            centerMade();
            // 事件添加
            event();
        }
    
        /**
         * 中间panel构建
         */
        public void centerMade() {
            Panel center = new Panel();
            center.setLayout(new BorderLayout());
            show = new TextArea();
            show.setEditable(false);
            show.setFont(new Font("xxx", Font.PLAIN, 15));
            edit = new TextArea();
            edit.setFont(new Font("xxx", Font.PLAIN, 15));
            center.add(show, BorderLayout.CENTER);
            center.add(edit, BorderLayout.SOUTH);
            this.add(center, BorderLayout.CENTER);
    
        }
    
        /**
         * 南边窗体初始化
         */
        public void sourceMade() {
            Panel source = new Panel();
            ip = new TextField(15);
            ip.setText("192.168.28.1");
            send = new Button("发送");
            log = new Button("记录");
            clear = new Button("清屏");
            shake = new Button("震动");
            source.add(ip);
            source.add(send);
            source.add(log);
            source.add(clear);
            source.add(shake);
            this.add(source, BorderLayout.SOUTH);
        }
    
        public void init() {
            this.setLocation(500, 500);
            this.setSize(400, 600);
            new Receive().start();
            this.setVisible(true);
        }
    
        public void event() {
            // 关闭窗体事件
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    socket.close();
                    System.exit(0);
                }
            });
    
            // 发送事件
            send.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        send();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
    
            });
    
            // 记录事件
            log.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        logFile();
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
    
            });
            
            
            // 清屏事件
            clear.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    show.setText("");
                }
    
            });
            
            // 震动事件
            shake.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        send(new byte[]{-1},ip.getText());
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            });
            //快捷键发送
            edit.addKeyListener(new KeyAdapter() {
                @Override
                public void keyReleased(KeyEvent e) {
                    //CTRL+回车====》发送信息
                    if(e.getKeyChar()==KeyEvent.VK_ENTER && e.isControlDown())
                    {
                        try {
                            send();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    }
                }
                
            });
        }
    
        public void logFile() throws Exception {
            bw.flush();
            //获取输入流
            FileInputStream fis=new FileInputStream("src/log.txt");
            //创建缓冲区
            ByteArrayOutputStream baos=new ByteArrayOutputStream();
            int len;
            byte arr[]=new byte[8192];
            while((len=fis.read(arr))!=-1)
            {
                baos.write(arr,0,len);
            }
            String str=baos.toString();
            show.setText(str);
            
            
        }
        
        public void shake() {
            int x=getLocation().x;
            int y=getLocation().y;
            for(int i=0;i<3;i++)
            {
                try {
                    this.setLocation(x+10,y+10);
                    Thread.sleep(20);
                    this.setLocation(x+10,y-10);
                    Thread.sleep(20);
                    this.setLocation(x-10,y+10);
                    Thread.sleep(20);
                    this.setLocation(x-10,y-10);
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            this.setLocation(x,y);
        }
        
        public void send(byte[] arr,String ip) throws IOException {
            DatagramPacket packet = new DatagramPacket(arr,
                    arr.length, InetAddress.getByName(ip), 9999);
            socket.send(packet);
            
        }
        
        public void send() throws IOException {
    
            String message = edit.getText();
            String host = ip.getText();
            host=((host.trim().length()==0)?"255.255.255.255":host);
            DatagramPacket packet = new DatagramPacket(message.getBytes(),
                    message.getBytes().length, InetAddress.getByName(host), 9999);
            socket.send(packet);
    
            String time = getCurrentTime();
            host=(("255.255.255.255").equals(host)?"所有人":host);
            String str = time + "我对" + host + "说:
    " + message + "
    
    ";
            show.append(str);
            bw.append(str);
            edit.setText("");
        }
        
        private String getCurrentTime() {
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            return sdf.format(date);
        }
    
        public static void main(String[] args) {
            GUIDemo demo = new GUIDemo();
        }
    
        private class Receive extends Thread {
            public void run() {
                try {
                    DatagramSocket socket = new DatagramSocket(9999);
                    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
                    while (true) {
                        socket.receive(packet);
                        String message = new String(packet.getData(), 0,
                                packet.getLength());
                        if(packet.getData()[0]==-1&&packet.getLength()==1)
                        {
                            shake();
                            continue;
                        }
                        
                        String time = getCurrentTime();
                        String ipstr = packet.getAddress().getHostAddress();
                        String str = time + " " + ipstr + " 对我说:
    " + message
                                + "
    
    ";
                        show.append(str);
                        bw.append(str);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
            }
        }
    
    }

    最终界面

    封装双击可运行jar包

    (1)选中涉及到的java文件

    (2)右击,导出

    (3)JavFile

    (4)next(选择保存路径)

    (5)next--next--(选取main所在类)

    (6)finash

  • 相关阅读:
    PG
    unzip
    yum
    PG
    SQL
    Grails
    Grails
    Grails
    Chrome
    HTML
  • 原文地址:https://www.cnblogs.com/excellencesy/p/9175061.html
Copyright © 2011-2022 走看看