zoukankan      html  css  js  c++  java
  • udp server client

    package testUDP;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class UDPServer
    
    {
    
        public static final int PORT = 30000;
    
        // 定义每个数据报的最大大小为4K
    
        private static final int DATA_LEN = 4096;
    
        // 定义该服务器使用的DatagramSocket
    
        private DatagramSocket socket = null;
    
        // 定义接收网络数据的字节数组
    
        byte[] inBuff = new byte[DATA_LEN];
    
        // 以指定字节数组创建准备接受数据的DatagramPacket对象
    
        private DatagramPacket inPacket =
    
        new DatagramPacket(inBuff, inBuff.length);
    
        // 定义一个用于发送的DatagramPacket对象
    
        private DatagramPacket outPacket;
    
        // 定义一个字符串数组,服务器发送该数组的的元素
    
        String[] books = new String[]
    
        {
    
        "轻量级J2EE企业应用实战",
    
        "基于J2EE的Ajax宝典",
    
        "Struts2权威指南",
    
        "ROR敏捷开发最佳实践"
    
        };
    
        public void init() throws IOException
    
        {
    
            try
    
            {
    
                // 创建DatagramSocket对象
    
                socket = new DatagramSocket(PORT);
    
                // 采用循环接受数据
    
                for (int i = 0; i < 1000; i++)
    
                {
    
                    // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
    
                    socket.receive(inPacket);
    
                    // 判断inPacket.getData()和inBuff是否是同一个数组
    
                    System.out.println(inBuff == inPacket.getData());
    
                    // 将接收到的内容转成字符串后输出
    
                    System.out.println(new String(inBuff,
    
                    0, inPacket.getLength()));
    
                    // 从字符串数组中取出一个元素作为发送的数据
    
                    byte[] sendData = books[i % 4].getBytes();
    
                    // 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的
    
                    // 源SocketAddress作为目标SocketAddress创建DatagramPacket.
    
                    outPacket = new DatagramPacket(sendData,
    
                    sendData.length, inPacket.getSocketAddress());
    
                    // 发送数据
    
                    socket.send(outPacket);
    
                }
    
            }
    
            // 使用finally块保证关闭资源
    
            finally
    
            {
    
                if (socket != null)
    
                {
    
                    socket.close();
    
                }
    
            }
    
        }
    
        public static void main(String[] args)
    
        throws IOException
    
        {
    
            new UDPServer().init();
    
        }
    
    }
    package testUDP;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    public class UDPClient  
    {  
        // 定义发送数据报的目的地  
        public static final int DEST_PORT = 30000;  
        public static final String DEST_IP = "127.0.0.1";  
        // 定义每个数据报的最大大小为4KB  
        private static final int DATA_LEN = 4*4096;     
        // 定义接收网络数据的字节数组  
        byte[] inBuff = new byte[DATA_LEN];  
        // 以指定的字节数组创建准备接收数据的DatagramPacket对象  
        private DatagramPacket inPacket =   
            new DatagramPacket(inBuff , inBuff.length);  
        // 定义一个用于发送的DatagramPacket对象  
        private DatagramPacket outPacket = null;  
        public void init()throws IOException  
        {  
            try(  
                // 创建一个客户端DatagramSocket,使用随机端口  
                DatagramSocket socket = new DatagramSocket())  
            {  
                // 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组  
                outPacket = new DatagramPacket(new byte[0] , 0  
                    , InetAddress.getByName(DEST_IP) , DEST_PORT);  
                // 创建键盘输入流  
                Scanner scan = new Scanner(System.in);  
                // 不断地读取键盘输入  
                while(scan.hasNextLine())  
                {  
                    // 将键盘输入的一行字符串转换成字节数组  
                    byte[] buff = scan.nextLine().getBytes();  
                    // 设置发送用的DatagramPacket中的字节数据  
                    outPacket.setData(buff);  
                    // 发送数据报  
                    socket.send(outPacket);  
                    // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组中  
                    socket.receive(inPacket);  
                    System.out.println(new String(inBuff , 0  
                        , inPacket.getLength()));  
                }  
            }  
        }  
        public static void main(String[] args)   
            throws IOException  
        {  
            new UDPClient().init();  
        }  
    }  
    

      

  • 相关阅读:
    Paint类的介绍
    缓存淘汰算法之LRU
    Android SurfaceView实战 打造抽奖转盘
    android中scrollTo和scrollBy的理解
    Android View.onMeasure方法的理解
    Android Context 上下文 你必须知道的一切
    Android Animation简述
    Markdown 语法说明
    理解Java虚拟机体系结构
    Java集合框架:HashMap
  • 原文地址:https://www.cnblogs.com/bigben0123/p/4643496.html
Copyright © 2011-2022 走看看