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