zoukankan      html  css  js  c++  java
  • Java UDP通信简单实现

    1、Java实现方式
    1)server端

    /**
     * UDPserver端
     * */
    public class UdpServer {
        // 定义一些常量
        private final intMAX_LENGTH = 1024; // 最大接收字节长度
        private final intPORT_NUM   = 5066;   // port号
        // 用以存放接收数据的字节数组
        private byte[] receMsgs = new byte[MAX_LENGTH];
        // 数据报套接字
        private DatagramSocket datagramSocket;
        // 用以接收数据报
        private DatagramPacket datagramPacket;
       
        public UdpServer(){
            try {
                /******* 接收数据流程**/
                // 创建一个数据报套接字,并将其绑定到指定port上
                datagramSocket = new DatagramSocket(PORT_NUM);
                // DatagramPacket(byte buf[], int length),建立一个字节数组来接收UDP包
                datagramPacket = new DatagramPacket(receMsgs, receMsgs.length);
                // receive()来等待接收UDP数据报
                datagramSocket.receive(datagramPacket);
               
                /****** 解析数据报****/
                String receStr = new String(datagramPacket.getData(), 0 , datagramPacket.getLength());
                System.out.println("Server Rece:" + receStr);
                System.out.println("Server Port:" + datagramPacket.getPort());
               
                /***** 返回ACK消息数据报*/
                // 组装数据报
                byte[] buf = "I receive the message".getBytes();
                DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, datagramPacket.getAddress(), datagramPacket.getPort());
                // 发送消息
                datagramSocket.send(sendPacket);
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 关闭socket
                if (datagramSocket != null) {
                    datagramSocket.close();
                }
            }
        }
    }

    2)client

    /***
     * UDPclientClient端
     ***/
    public class UdpClient {
       
        private String sendStr = "SendString";
        private String netAddress = "127.0.0.1";
        private final intPORT_NUM = 5066;
       
        private DatagramSocket datagramSocket;
        private DatagramPacket datagramPacket;
       
        public UdpClient(){
            try {
               
                /*** 发送数据***/
                // 初始化datagramSocket,注意与前面Server端实现的差别
                datagramSocket = new DatagramSocket();
                // 使用DatagramPacket(byte buf[], int length, InetAddress address, int port)函数组装发送UDP数据报
                byte[] buf = sendStr.getBytes();
                InetAddress address = InetAddress.getByName(netAddress);
                datagramPacket = new DatagramPacket(buf, buf.length, address, PORT_NUM);
                // 发送数据
                datagramSocket.send(datagramPacket);
               
                /*** 接收数据***/
                byte[] receBuf = new byte[1024];
                DatagramPacket recePacket = new DatagramPacket(receBuf, receBuf.length);
                datagramSocket.receive(recePacket);
               
                String receStr = new String(recePacket.getData(), 0 , recePacket.getLength());
                System.out.println("Client Rece Ack:" + receStr);
                System.out.println(recePacket.getPort());
               
               
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 关闭socket
                if(datagramSocket != null){
                    datagramSocket.close();
                }
            }
        }  
    }

  • 相关阅读:
    sql语句执行顺序
    ThinkPHP的入门学习目录结构及基础知识
    IE6的PNG透明解决方案
    用CSS画三角形
    position:sticky介绍 页面滚动导航条始终在最顶部的实现方法
    那些年我们一起清除过的浮动
    "自适应网页设计"到底是怎么做到的?其实并不难。
    jQuery formValidator表单验证插件(详解)
    学习10分钟,改变你的程序员生涯【转载】
    最差的时光 枯木
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6882802.html
Copyright © 2011-2022 走看看