[Update]自定义协议并解决TCP粘包/拆包问题

This commit is contained in:
chenfufeng
2022-02-14 15:58:48 +08:00
parent 4e2c6ffd7a
commit fc89d1a34b
10 changed files with 227 additions and 84 deletions

View File

@@ -49,7 +49,9 @@ public class NSDNettyManager {
private NettyServerListener mDefaultListener = new NettyServerListener() {
@Override
public void onMessageResponseServer(Object msg, String ChannelId) {
if (mListener != null) {
mListener.onMessageResponseServer(msg, ChannelId);
}
}
@Override
@@ -114,6 +116,10 @@ public class NSDNettyManager {
NettyTcpServer.getInstance().sendMsgToClient(byteArray, listener);
}
public void sendMogoProtocolMsgToClient(MogoProtocolMsg mogoProtocolMsg, ChannelFutureListener listener) {
NettyTcpServer.getInstance().sendMsgToClient(mogoProtocolMsg, listener);
}
/**
* 服务器端注册一个可供NSD探测到的网络 Ip 地址便于给展示叫号机连接此socket
*/
@@ -204,11 +210,9 @@ public class NSDNettyManager {
.setMaxReconnectTimes(5) //设置最大重连次数
.setReconnectIntervalTime(5) //设置重连间隔时间。单位:秒
.setSendHeartBeat(true) //设置是否发送心跳
.setHeartBeatInterval(5) //设置心跳间隔时间。单位:秒
.setHeartBeatData(new byte[]{0x00, 0x00, 0x00, 0x00}) //设置心跳数据可以是String类型也可以是byte[],以后设置的为准
.setHeartBeatInterval(120) //设置心跳间隔时间。单位:秒
.setHeartBeatData(new MogoProtocolMsg(MogoProtocolMsg.HEART_DATA, 2, new byte[]{0x00, 0x00})) //设置心跳数据可以是String类型也可以是byte[],以后设置的为准
.setIndex(0) //设置客户端标识.(因为可能存在多个tcp连接)
// .setPacketSeparator("#")//用特殊字符,作为分隔符,解决粘包问题,默认是用换行符作为分隔符
// .setMaxPacketLong(1024)//设置一次发送数据的最大长度默认是1024最大值为Integer.MAX
.build();
if (listener != null) {
mNettyTcpClient.setListener(listener); //设置TCP监听
@@ -226,6 +230,12 @@ public class NSDNettyManager {
return mNettyTcpClient.getConnectStatus();
}
public void sendMogoProtocolMsgToServer(MogoProtocolMsg mogoProtocolMsg, final MessageStateListener listener) {
if (mNettyTcpClient != null) {
mNettyTcpClient.sendMsgToServer(mogoProtocolMsg, listener);
}
}
/**
* 发送byte[]到服务端
* @param byteArray