From 27a0768b0e0a042911b7f299fcc599d2da4e7fc0 Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期一, 13 十二月 2021 10:36:52 +0800
Subject: [PATCH] 更改了udp测试后版本

---
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java        |   56 ++++++++++++++----
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java |   30 ++++++---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java   |   30 +++++-----
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java        |    6 +
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java         |   19 +++--
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java               |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java       |    9 +-
 7 files changed, 99 insertions(+), 53 deletions(-)

diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
index ed94f66..1148624 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -71,8 +71,8 @@
     private volatile static HDLAuthSocket instance;
 
     private HDLAuthSocket() {
-        initSearchGatewayEvent();
         initListenerGatewayEvent();
+        initSearchGatewayEvent();
     }
 
 //    public interface CallBack extends BaseCallBack {
@@ -89,8 +89,6 @@
             synchronized (HDLLinkConfig.class) {
                 if (instance == null) {
                     instance = new HDLAuthSocket();
-                    //1.鍚姩Socket 寮�鍚洃鍚�
-                    instance.getUdpBoot();
                 }
             }
         }
@@ -132,6 +130,8 @@
      */
     public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) {
         HDLLinkConfig.getInstance().clearConfig();
+        //1.鍚姩Socket 寮�鍚洃鍚�
+        getUdpBoot();
         //2.鏋勫缓鐩戝惉Listener
 //        authEvent =
         //3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠�
@@ -177,7 +177,7 @@
         String requestStr = gs.toJson(request);
         LinkRequest message = new LinkRequest(topic, requestStr);
 
-        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.send(getUdpBoot(), ip,UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
             @Override
             public void onSucceed(Object msg) {
                 if (callBack == null) return;
@@ -293,7 +293,7 @@
      * @param callBack 鍥炶皟
      */
     public void searchGatewayMulticast(SearchGatewayCallBack callBack) {
-        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  InetSocketAddress.createUnresolved(UDP_GROUP_IP,UDP_PORT), callBack);
+        searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP,UDP_PORT, callBack);
     }
 
     /**
@@ -303,7 +303,7 @@
      */
     public void searchGatewayBroadcast(SearchGatewayCallBack callBack) {
         String ip = IpUtils.getBroadcastAddress();
-        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  InetSocketAddress.createUnresolved(ip,UDP_PORT), callBack);
+        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  ip,UDP_PORT, callBack);
     }
 
 
@@ -321,7 +321,7 @@
                 GsonConvert.getGson().toJson(data));
 
         String ip = IpUtils.getBroadcastAddress();
-        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.send(getUdpBoot(), ip,UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
             @Override
             public void onSucceed(Object msg) {
                 if (callBack == null) return;
@@ -353,8 +353,8 @@
             return;
         }
         LinkRequest message = new LinkRequest(topic, bodyStr);
-        String ip = HDLLinkConfig.getInstance().getIpAddress(); IpUtils.getBroadcastAddress();
-        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+        String ip = HDLLinkConfig.getInstance().getIpAddress();
+        HdlSocketHelper.send(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
                     @Override
                     public void onSucceed(Object msg) {
                         if (callBack == null) return;
@@ -383,7 +383,7 @@
         }
         LinkRequest message = new LinkRequest(topic, bodyStr);
         String ip = HDLLinkConfig.getInstance().getIpAddress();// IpUtils.getBroadcastAddress();
-        getUdpBoot().sendMsg( InetSocketAddress.createUnresolved(ip,UDP_PORT),message.getSendBytes());
+        getUdpBoot().sendMsg( ip,UDP_PORT,message.getSendBytes());
     }
 
     private GatewaySearchBean getGatewaySearchBean(Object msg) {
@@ -513,10 +513,11 @@
      * 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄
      *
      * @param gatewayId 缃戝叧id
-     * @param desInetSocketAddress        鐩爣鐨勫湴鍧�
+     * @param ipAddress        鐩爣鐨処P鍦板潃
+     * @param port 鐩爣鐨勭鍙�
      * @param callBack  鍥炶皟
      */
-    public void searchGateway(String gatewayId, InetSocketAddress desInetSocketAddress, SearchGatewayCallBack callBack) {
+    public void searchGateway(String gatewayId, String ipAddress,int port, SearchGatewayCallBack callBack) {
         this.searchGatewayId = gatewayId;
         this.mSearchGatewayCallBack = callBack;
         //閲嶇疆鍙傛暟
@@ -538,7 +539,7 @@
                         //鎼滅储缃戝叧
                         searchGatewayCount.set(searchGatewayCount.get() + 1);
                         LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�");
-                        getUdpBoot().sendMsg(desInetSocketAddress,message.getSendBytes());
+                        getUdpBoot().sendMsg(ipAddress, port, message.getSendBytes());
                         Thread.sleep(1000L);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
@@ -548,11 +549,10 @@
                 if (!isSearchGatewaySuccess.get()) {
                     //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
                     callBackSearchGatewayTimeout();
-                    LogUtils.e("鎼滅储缃戝叧--", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
+                    LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
                 }
             }
         }).start();
-
     }
 
     /**
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
index 8489b60..b03d0fe 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -558,14 +558,14 @@
                 @Override
                 public void onMessage(Object msg) {
                     if (msg instanceof LinkResponse) {
-                        LogUtils.e("sendMsg onSuccess");
+                        LogUtils.i("sendMsg onSuccess");
+                        threadPool.shutdownNow();
+                        LogUtils.i("sendMsg eventListener remove");
+                        EventDispatcher.getInstance().remove(eventTag, this);
                         if (callBack != null) {
                             callBack.onSuccess(msg.toString());
                         }
-                        threadPool.shutdownNow();
                     }
-                    LogUtils.e("sendMsg eventListener remove");
-                    EventDispatcher.getInstance().remove(eventTag, this);
                 }
             };
 
@@ -591,6 +591,7 @@
                 }
             }, 1000, 500, TimeUnit.MILLISECONDS);
             EventDispatcher.getInstance().register(eventTag, eventListener);
+            //鍏堝彂閫佷竴娆�
             getTcp().sendMsg(data, new SendListener() {
                 @Override
                 public void onSucceed() {
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
index ea53e38..387661b 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
@@ -29,7 +29,14 @@
 
     private SocketBoot boot;
     private UdpSocketBoot udpSocketBoot;
-    private InetSocketAddress inetSocketAddress;
+    /**
+     * 鍙戦�佺殑鐩爣IP
+     */
+    private String ipAddress;
+    /**
+     * 鍙戦�佺殑鐩爣鍦板潃
+     */
+    private int port;
     private final LinkRequest linkRequest;
     private final EventListener eventListener;
 
@@ -71,11 +78,12 @@
     }
 
     private HdlSocketHelper(Long sendAwaitTime, int maxRetry, UdpSocketBoot udpSocketBoot,
-                            InetSocketAddress inetSocketAddress, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
+                            String ipAddress,int port , LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
         this.sendAwaitTime = sendAwaitTime;
         this.maxRetry = maxRetry;
         this.udpSocketBoot = udpSocketBoot;
-        this.inetSocketAddress = inetSocketAddress;
+        this.ipAddress = ipAddress;
+        this.port = port;
         this.linkRequest = linkRequest;
         this.listener = listener;
         this.sendNumber = new AtomicInteger(0);
@@ -120,16 +128,17 @@
      * Udp鐨勫彂閫佹柟娉�
      *
      * @param udpSocketBoot     Udp褰撳墠瀵规帴
-     * @param inetSocketAddress 鍙戦�佺殑鐩爣鍦板潃
+     * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+     * @param port 鐩殑绔彛
      * @param linkRequest       鍙戦�佺殑鏁版嵁
      * @param observeTopic      鍙戦�佺殑涓婚
      * @param listener          鍥炶皟
      */
-    public static void send(UdpSocketBoot udpSocketBoot, InetSocketAddress inetSocketAddress, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
+    public static void send(UdpSocketBoot udpSocketBoot, String  ipAddress ,int port, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
         if (TextUtils.isEmpty(observeTopic)) {
             observeTopic = linkRequest.getTopic() + "_reply";
         }
-        HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, inetSocketAddress, linkRequest, observeTopic, listener);
+        HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, ipAddress,port, linkRequest, observeTopic, listener);
         socketHelper.send();
     }
 
@@ -137,16 +146,17 @@
      * Udp鍙戦�佺殑鏂规硶
      *
      * @param udpSocketBoot     褰撳墠Udp瀵硅薄
-     * @param inetSocketAddress 鍙戦�佺殑鐩爣鍦板潃
+     * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+     * @param
      * @param linkRequest       鍙戦�佺殑瀵硅薄
      * @param listener          鍥炶皟
      */
-    public static void send(UdpSocketBoot udpSocketBoot, InetSocketAddress inetSocketAddress, LinkRequest linkRequest, HdlSocketListener listener) {
+    public static void send(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest, HdlSocketListener listener) {
         String observeTopic = null;
         if (TextUtils.isEmpty(observeTopic)) {
             observeTopic = linkRequest.getTopic() + "_reply";
         }
-        HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, inetSocketAddress, linkRequest, observeTopic, listener);
+        HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, ipAddress,port, linkRequest, observeTopic, listener);
         socketHelper.send();
     }
 
@@ -166,7 +176,7 @@
                             }
                             //濡傛灉鏄痷dp
                             if (null != udpSocketBoot) {
-                                udpSocketBoot.sendMsg(inetSocketAddress, linkRequest.getSendBytes());
+                                udpSocketBoot.sendMsg(ipAddress,port, linkRequest.getSendBytes());
                             }
                         }
                     } catch (Exception e) {
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java
index 0b499a5..7d211f7 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java
@@ -35,7 +35,7 @@
         mUdpClientPool.clear();
     }
 
-    public synchronized DatagramSocket getUdpSocket1(InetSocketAddress address) throws SocketException {
+    public synchronized DatagramSocket getUdpSocket(InetSocketAddress address) throws SocketException {
         DatagramSocket socket;
         final String key = address.toString();
         if (mUdpClientPool.containsKey(key)) {
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java
index 1fff63f..0e6e5d6 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java
@@ -4,6 +4,7 @@
 import com.hdl.sdk.socket.udp.UdpSocketOptions;
 
 import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 
 /**
  * Created by hxb on 2021/12/12.
@@ -31,10 +32,11 @@
 
     /**
      * 鍙戦�佹暟鎹�
-     * @param inetSocketAddress 鐩爣鍦板潃
+     * @param ipAddress 鐩爣IP
+     * @param port 绔彛
      * @param msg 鍙戦�佹暟鎹�
      * @throws Exception
      */
-    void sendMsg(InetSocketAddress inetSocketAddress, byte[] msg) throws Exception;
+    void sendMsg(String ipAddress,int port, byte[] msg) throws Exception;
 
 }
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
index c2a75a4..bc51943 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -17,6 +17,7 @@
 import java.net.DatagramSocket;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 
@@ -98,7 +99,7 @@
                 return;
             }
             if (TextUtils.isEmpty(ipAddress)) {
-                mSocket = SocketPool.getInstance().getUdpSocket1(new InetSocketAddress(port));
+                mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(port));
             }
             mSocket.setBroadcast(true);
             mSocket.setReuseAddress(true);
@@ -122,15 +123,16 @@
 
     @Override
     public UdpSocketOptions getOptions() {
-        return null;
+        return this.socketOptions;
     }
 
+    @Override
     public void onHandleResponse() throws Exception {
         if (mSocket == null) {
             return;
         }
         try {
-           mSocket.receive(receivePacket);
+            mSocket.receive(receivePacket);
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -139,14 +141,14 @@
         }
         //鎺掗櫎鑷繁鍙戝嚭鍘荤殑
         try {
-            if (IpUtils.isLocalIpAddress( receivePacket.getAddress().getHostAddress()))
+            if (IpUtils.isLocalIpAddress(receivePacket.getAddress().getHostAddress()))
                 return;
         } catch (Exception ignored) {
 
         }
 
         try {
-            LogUtils.i( "鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
+            LogUtils.i("鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
 
             IHandleMessage handleMessage = getOptions().getHandleMessage();
             if (handleMessage != null) {
@@ -155,17 +157,18 @@
                 handleMessage.read(data);
             }
 
-        }catch (Exception e){
+        } catch (Exception e) {
 
         }
     }
 
+
     @Override
-    public void sendMsg(InetSocketAddress inetSocketAddress, byte[] msg) throws Exception {
+    public void sendMsg(String ipAddress,int port, byte[] msg) throws Exception {
         if (msg == null) {
             return;
         }
-        final DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, inetSocketAddress);
+        final DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, InetAddress.getByName(ipAddress), port);
         mSocket.send(sendPacket);
     }
 }
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
index 5e87c6b..44bbf86 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
@@ -13,7 +13,9 @@
 import com.hdl.sdk.socket.listener.SendListener;
 
 import java.net.ConnectException;
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingDeque;
@@ -33,6 +35,8 @@
 
     private final AtomicInteger resendCount = new AtomicInteger(0);
 
+    private ExecutorService receiveThread;
+
     private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>();
 
     public UdpSocketBoot(IUdpClient client) {
@@ -44,38 +48,63 @@
      * @throws Exception 鍙兘绔彛鍐茬獊
      */
     public void bind() throws Exception {
-        if (null != client) {
-            client.bind();
-        }
+        client.bind();
+        initReceiveThread();
     }
 
     /**
+     * 鍒濆鍖栨帴鏀剁嚎绋�
+     */
+    private void initReceiveThread() {
+        if(null!=receiveThread){
+            return;
+        }
+        receiveThread = ThreadToolUtils.getInstance().newFixedThreadPool(1);
+        receiveThread.execute(new Runnable() {
+            @Override
+            public void run() {
+                while (true) {
+                    try {
+                        client.onHandleResponse();
+                    } catch (Exception e) {
+                       LogUtils.i("鎺ユ敹绾跨▼寮傚父锛�"+e.getMessage());
+                    }
+                }
+            }
+        });
+    }
+
+
+    /**
      * 鍙戦�佹暟鎹�
-     * @param inetSocketAddress 鐩殑鐨処P鍦板潃
+     * @param ipAddress 鐩殑鐨処P鍦板潃
+     * @param port 绔彛
      * @param msg 鍙戦�佹暟鎹�
      * @param listener 鍙戦�佸洖璋�
      */
-    public void sendMsg(InetSocketAddress inetSocketAddress,byte[] msg, SendListener listener) {
-        sendMsg(inetSocketAddress, msg, true, listener);
+    public void sendMsg(String ipAddress,int port,byte[] msg, SendListener listener) {
+        sendMsg(ipAddress,port, msg, true, listener);
     }
 
     /**
      * 鍙戦�佹暟鎹�
-     * @param inetSocketAddress 鐩殑鐨処P鍦板潃
+     * @param ipAddress 鐩殑鐨処P鍦板潃
+     * @param port 绔彛
      * @param msg 鍙戦�佹暟鎹�
      */
-    public void sendMsg(InetSocketAddress inetSocketAddress,byte[] msg) {
-        sendMsg(inetSocketAddress, msg, true, null);
+    public void sendMsg(String ipAddress,int port,byte[] msg) {
+        sendMsg(ipAddress,port, msg, true, null);
     }
 
     /**
      * 鍙戦�佹暟鎹�
-     * @param inetSocketAddress 鐩殑IP鍦板潃
+     * @param ipAddress 鐩殑IP鍦板潃
+     * @param port 绔彛
      * @param msg 鍙戦�佺殑鏁版嵁
      * @param isRefreshRetry 鏄惁瑕侀噸鍙�
      * @param listener 鍙戦�佸洖璋�
      */
-    public void sendMsg(InetSocketAddress inetSocketAddress, byte[] msg, boolean isRefreshRetry, SendListener listener) {
+    public void sendMsg(String ipAddress,int port, byte[] msg, boolean isRefreshRetry, SendListener listener) {
         if (isRefreshRetry) {
             //閲嶇疆杩炴帴娆℃暟
             resendCount.set(0);
@@ -85,7 +114,7 @@
             if (listener != null && !TextUtils.isEmpty(request.getAction())) {
                 sendMap.put(request.getAction(), listener);
             }
-            client.sendMsg(inetSocketAddress, msg);
+            client.sendMsg(ipAddress,port, msg);
         } catch (Exception e) {
             LogUtils.i("鍙戦�佸け璐�:" + e.getMessage());
         }
@@ -96,8 +125,9 @@
      */
     public synchronized void close() {
         isOpenRetry.set(false);
-
         sendMap.clear();
+        receiveThread.shutdown();
+        receiveThread=null;
         client.close();
     }
 }

--
Gitblit v1.8.0