美文网首页
Socket实现UDP编程

Socket实现UDP编程

作者: JC_Hou | 来源:发表于2018-01-05 10:59 被阅读14次
    image.png image.png

    适用于一次的少量的连接

    服务器

    package com.company;
    
    import java.io.IOException;
    import java.net.*;
    
    public class UDPServer {
        public static void main(String[] args) {
            try {
                //1、创建服务器端DatagramSocket
                DatagramSocket datagramSocket = new DatagramSocket(8080);
    
                while (true){
                    //2、创建数据报,用于接收客户端发送的数据
                    byte[] bytes=new byte[1024];//1k
                    DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
                    System.out.println("服务器端等待新的客户端发送数据");
                    //3、此方法在获取到数据报之前,会处于阻塞状态
                    datagramSocket.receive(datagramPacket);
    
                    new UDPServerThread(datagramSocket,datagramPacket,bytes).run();
                }
    
    
    //            datagramSocket.close();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    多线程

    package com.company;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class UDPServerThread extends Thread {
    
        DatagramPacket datagramPacket;
        byte[] bytes;
    
        //和本线程相关的DatagramSocket
        DatagramSocket datagramSocket = null;
    
    
        public UDPServerThread(DatagramSocket datagramSocket,DatagramPacket datagramPacket,
                               byte[] bytes) {
            this.datagramSocket = datagramSocket;
            this.datagramPacket = datagramPacket;
            this.bytes = bytes;
        }
    
        @Override
        public void run() {
    
            try {
                //4、读取数据
                String info = new String(bytes, 0, datagramPacket.getLength(), "gbk");
                System.out.println("获取到客户端数据:" + info);
    
                //5、响应客户端数据,创建数据包
                InetAddress address = datagramPacket.getAddress();//客户端地址
                int port = datagramPacket.getPort();//客户端端口
                byte[] bytes1 = "欢迎您".getBytes("gbk");
                DatagramPacket packet = new DatagramPacket(bytes1, bytes1.length, address, port);
                datagramSocket.send(packet);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    客户端

    package com.company;
    
    import java.io.IOException;
    import java.net.*;
    
    public class UDPClient {
    
        public static void main(String[] args) {
            try {
                //1、定义服务器的地址、端口号、数据
                InetAddress inetAddress = InetAddress.getByName("localhost");
                int port = 8080;
                //2、创建DatagramSocket对象
                DatagramSocket socket = new DatagramSocket();
    
                //3、创建数据报
                byte[] bytes = "admin;456".getBytes("gbk");
                DatagramPacket packet = new DatagramPacket(bytes, bytes.length, inetAddress, port);
    
                //4、发送数据报
                socket.send(packet);
    
                //5、闯将获取的数据报
                byte[] bytes1 = new byte[1024];
                DatagramPacket packet1 = new DatagramPacket(bytes1, bytes1.length);
                socket.receive(packet1);
    
                String info = new String(bytes1, 0, packet1.getLength(), "gbk");
                System.out.print("收到服务端数据:" + info);
    
    
                //5、关闭资源
                socket.close();
    
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Socket实现UDP编程

          本文链接:https://www.haomeiwen.com/subject/zpovpxtx.html