首页 > 技术文章 > UDP端口启动后一段时间无法接收到数据

leocorn 2018-10-18 15:06 原文

接口需求:开发一个UDP协议的接口作为服务端接收来自客户端的认证数据,数据量每分钟7w+条;

数据格式:标准的redius协议,redius协议的相关知识在网上查资料,提供线索:http://blog.sina.com.cn/s/blog_5fc93bc00102w9dr.html

 

问题:接口在启动一段时间过后收不到数据,程序出现假死现象,检查发现日志没有抛任何异常、进程也任然存在,添加各种日志调试程序,经过测试发现是数据处理速度上的问题,导致主机资源不够,添加线程后解决问题。

#修改代码如下:

private void init(int port) {
        try {
            // 获取本机上的网络接口对象
            DatagramSocket ds = new DatagramSocket(port);
            System.out.println("等待客户端数据……");
            
            Map<String, String> dataMap ;
            DatagramPacket dp;
            while (true) {
                try {
                    byte[] buf = new byte[256];
                    dp = new DatagramPacket(buf, buf.length);//重置内部长度
                    ds.receive(dp);// 阻塞式的 
                    byte[] data = Arrays.copyOfRange(dp.getData(), 0,dp.getData().length);
            
new ServerThread(data);//启用线程处理接收到的数据 } catch (Exception e) { e.printStackTrace(); } } } catch (Exception ef) { ef.printStackTrace(); } } class ServerThread extends Thread { private byte[] data; public ServerThread(byte[] data) { this.data = data; start(); } public void run() { try { radius.radiusType(data);//redius报文解析 } catch (Exception e) { e.printStackTrace(); } } }

 

推荐阅读