From 291d27a34b52911dbcfd8232f0685d34b0fc96a8 Mon Sep 17 00:00:00 2001
From: whyclj <1525436766@qq.com>
Date: 星期五, 23 十月 2020 10:30:59 +0800
Subject: [PATCH] 代码优化

---
 EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java |   66 +++++++++++++++++++--------------
 1 files changed, 38 insertions(+), 28 deletions(-)

diff --git a/EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java b/EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java
index e506ac0..f55f1f7 100644
--- a/EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java
+++ b/EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java
@@ -41,6 +41,7 @@
 		System.out.println("InverterPowerUDPServer_Thread start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
 		try {
 			byte[] data = null;
+			int conn_error_count = 0;
 		    while(true) {
 		    	DatagramSocket ds = null;
 				try {
@@ -48,42 +49,51 @@
 					DatagramPacket packet = new DatagramPacket(data, data.length);
 					//监听指定的端口号
 					ds = new DatagramSocket(server_port);
-					//ds.setSoTimeout(5000);
+					ds.setSoTimeout(5000);
+					conn_error_count = 0;
 					while (true) {
-						ds.receive(packet);						
-						byte[] headCount = new byte[2];
-						
-						System.arraycopy(data, 0, headCount, 0, headCount.length);
-						BaseData basedata = new BaseData();
-						ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
-						if(createPackHeadCount(data) > data.length) {
-							continue;			//数据帧超标判断
-						}
-						bf.order(ByteOrder.LITTLE_ENDIAN);
-				        bf.put(data,0,createPackHeadCount(data));
-				        bf.flip();
-				        //BaseData.udpCheck(bf.array());
-				        //System.out.println(packet.getSocketAddress());
-				        //System.out.println(ds.getLocalSocketAddress().toString());
-				        //System.out.println("接收到逆变电源系统:"+ComFn.bytesToHexString(data, createPackHeadCount(data)));
-				        //System.out.println("");
-						if(basedata.putNiBianByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
-							//System.out.println(basedata.data.length);
-							String client_ip = packet.getSocketAddress().toString();
-							if(basedata.packtype == BaseData.NiBianPower_DevType) {
-								RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_InverPower, client_ip, bf.array());
-								
-								InverterPower_Thread power_thread = new InverterPower_Thread(conn_pool, devices, basedata,client_ip);
-								new Thread(power_thread).start();
-								Dev_UDPServer_Thread.thread_count++;
+						try {
+							ds.receive(packet);						
+							byte[] headCount = new byte[2];
+							
+							System.arraycopy(data, 0, headCount, 0, headCount.length);
+							BaseData basedata = new BaseData();
+							ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
+							if(createPackHeadCount(data) > data.length) {
+								continue;			//数据帧超标判断
 							}
+							bf.order(ByteOrder.LITTLE_ENDIAN);
+							bf.put(data,0,createPackHeadCount(data));
+							bf.flip();
+							//BaseData.udpCheck(bf.array());
+							//System.out.println(packet.getSocketAddress());
+							//System.out.println(ds.getLocalSocketAddress().toString());
+							//System.out.println("接收到逆变电源系统:"+ComFn.bytesToHexString(data, createPackHeadCount(data)));
+							//System.out.println("");
+							if(basedata.putNiBianByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
+								//System.out.println(basedata.data.length);
+								String client_ip = packet.getSocketAddress().toString();
+								if(basedata.packtype == BaseData.NiBianPower_DevType) {
+									RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_InverPower, client_ip, bf.array());
+									
+									InverterPower_Thread power_thread = new InverterPower_Thread(conn_pool, devices, basedata,client_ip);
+									new Thread(power_thread).start();
+									Dev_UDPServer_Thread.thread_count++;
+								}
+							}
+						} catch (Exception e) {
+							conn_error_count ++;
+							if(conn_error_count >=6) {
+								break;
+							}
+							//e.printStackTrace();
 						}
 						//测试程序异常情况下,程序能否继续运行
 						//System.out.println(1/0);
 						Thread.sleep(10);
 					}
 				} catch (Exception e) {
-					Thread.sleep(1000);
+					Thread.sleep(100);
 					e.printStackTrace();
 				} finally {
 					if(ds != null) {

--
Gitblit v1.9.1