[Update]自定义协议并解决TCP粘包/拆包问题
This commit is contained in:
@@ -13,13 +13,14 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.mogo.cloud.R;
|
||||
import com.mogo.cloud.netty.LogBean;
|
||||
import com.mogo.telematic.MogoProtocolMsg;
|
||||
import com.mogo.telematic.NSDNettyManager;
|
||||
import com.mogo.telematic.client.listener.NettyClientListener;
|
||||
import com.mogo.telematic.client.status.ConnectState;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class NettyClientActivity extends AppCompatActivity implements View.OnClickListener, NettyClientListener<byte[]> {
|
||||
public class NettyClientActivity extends AppCompatActivity implements View.OnClickListener, NettyClientListener<MogoProtocolMsg> {
|
||||
|
||||
private static final String TAG = "NettyClientActivity";
|
||||
|
||||
@@ -36,6 +37,8 @@ public class NettyClientActivity extends AppCompatActivity implements View.OnCli
|
||||
|
||||
private final byte[] sendByte = new byte[]{0x55, 0x54, 0x72, 0x21};
|
||||
|
||||
private final MogoProtocolMsg mogoProtocolMsg = new MogoProtocolMsg(MogoProtocolMsg.NORMAL_DATA, 3, new byte[]{0x11, 0x12, 0x13});
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -68,7 +71,7 @@ public class NettyClientActivity extends AppCompatActivity implements View.OnCli
|
||||
mSendBtn.setOnClickListener(this);
|
||||
mClearLog.setOnClickListener(this);
|
||||
|
||||
mSendET.setText(Arrays.toString(sendByte));
|
||||
mSendET.setText(Arrays.toString(mogoProtocolMsg.getBody()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,15 +85,15 @@ public class NettyClientActivity extends AppCompatActivity implements View.OnCli
|
||||
if (!NSDNettyManager.getInstance().getConnectStatus()) {
|
||||
Toast.makeText(getApplicationContext(), "未连接,请先连接", Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
NSDNettyManager.getInstance().sendByteArrayToServer(sendByte, isSuccess -> {
|
||||
NSDNettyManager.getInstance().sendMogoProtocolMsgToServer(mogoProtocolMsg, isSuccess -> {
|
||||
if (isSuccess) {
|
||||
Log.d(TAG, "Write auth successful");
|
||||
logSend(Arrays.toString(sendByte));
|
||||
logSend(Arrays.toString(mogoProtocolMsg.getBody()));
|
||||
} else {
|
||||
Log.d(TAG, "Write auth error");
|
||||
}
|
||||
});
|
||||
mSendET.setText(Arrays.toString(sendByte));
|
||||
mSendET.setText(Arrays.toString(mogoProtocolMsg.getBody()));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -104,8 +107,8 @@ public class NettyClientActivity extends AppCompatActivity implements View.OnCli
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageResponseClient(byte[] msg, int index) {
|
||||
String result = Arrays.toString(msg);
|
||||
public void onMessageResponseClient(MogoProtocolMsg msg, int index) {
|
||||
String result = msg.toString();
|
||||
Log.e(TAG, "onMessageResponse:" + result);
|
||||
logRece(result);
|
||||
}
|
||||
@@ -125,15 +128,19 @@ public class NettyClientActivity extends AppCompatActivity implements View.OnCli
|
||||
}
|
||||
|
||||
private void logSend(String log) {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mSendLogAdapter.getDataList().add(0, logBean);
|
||||
runOnUiThread(() -> mSendLogAdapter.notifyDataSetChanged());
|
||||
runOnUiThread(() -> {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mSendLogAdapter.getDataList().add(0, logBean);
|
||||
mSendLogAdapter.notifyDataSetChanged();
|
||||
});
|
||||
}
|
||||
|
||||
private void logRece(String log) {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mReceLogAdapter.getDataList().add(0, logBean);
|
||||
runOnUiThread(() -> mReceLogAdapter.notifyDataSetChanged());
|
||||
runOnUiThread(() -> {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mReceLogAdapter.getDataList().add(0, logBean);
|
||||
mReceLogAdapter.notifyDataSetChanged();
|
||||
});
|
||||
}
|
||||
|
||||
public void disconnect(View view) {
|
||||
|
||||
@@ -18,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.mogo.cloud.R;
|
||||
import com.mogo.cloud.netty.LogBean;
|
||||
import com.mogo.telematic.MogoProtocolMsg;
|
||||
import com.mogo.telematic.NSDNettyManager;
|
||||
import com.mogo.telematic.NetworkUtils;
|
||||
import com.mogo.telematic.server.bean.ClientChanel;
|
||||
@@ -30,7 +31,7 @@ import java.util.List;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
|
||||
public class NettyServerActivity extends AppCompatActivity implements View.OnClickListener, NettyServerListener<byte[]> {
|
||||
public class NettyServerActivity extends AppCompatActivity implements View.OnClickListener, NettyServerListener<MogoProtocolMsg> {
|
||||
|
||||
private static final String TAG = "NettyServerActivity";
|
||||
|
||||
@@ -52,6 +53,8 @@ public class NettyServerActivity extends AppCompatActivity implements View.OnCli
|
||||
|
||||
private final byte[] sendByte = new byte[]{0x55, 0x54, 0x72, 0x21};
|
||||
|
||||
private final MogoProtocolMsg mogoProtocolMsg = new MogoProtocolMsg(MogoProtocolMsg.NORMAL_DATA, 3, new byte[]{0x11, 0x12, 0x13});
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -107,7 +110,7 @@ public class NettyServerActivity extends AppCompatActivity implements View.OnCli
|
||||
startServer.setOnClickListener(this);
|
||||
mSendBtn.setOnClickListener(this);
|
||||
mClearLog.setOnClickListener(this);
|
||||
mSendET.setText(Arrays.toString(sendByte));
|
||||
mSendET.setText(Arrays.toString(mogoProtocolMsg.getBody()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -127,15 +130,15 @@ public class NettyServerActivity extends AppCompatActivity implements View.OnCli
|
||||
if (!NSDNettyManager.getInstance().isServerStart()) {
|
||||
Toast.makeText(getApplicationContext(), "未连接,请先连接", LENGTH_SHORT).show();
|
||||
} else {
|
||||
NSDNettyManager.getInstance().sendByteArrayToClient(sendByte, channelFuture -> {
|
||||
NSDNettyManager.getInstance().sendMogoProtocolMsgToClient(mogoProtocolMsg, channelFuture -> {
|
||||
if (channelFuture.isSuccess()) {
|
||||
Log.d(TAG, "Write auth successful");
|
||||
logSend(Arrays.toString(sendByte));
|
||||
logSend(Arrays.toString(mogoProtocolMsg.getBody()));
|
||||
} else {
|
||||
Log.d(TAG, "Write auth error");
|
||||
}
|
||||
});
|
||||
mSendET.setText(Arrays.toString(sendByte));
|
||||
mSendET.setText(Arrays.toString(mogoProtocolMsg.getBody()));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -149,10 +152,10 @@ public class NettyServerActivity extends AppCompatActivity implements View.OnCli
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageResponseServer(byte[] msg, String uniqueId) {
|
||||
Log.e(TAG,"onMessageResponseServer:ChannelId:"+uniqueId);
|
||||
public void onMessageResponseServer(MogoProtocolMsg msg, String channelId) {
|
||||
Log.e(TAG,"onMessageResponseServer:channelId:" + channelId);
|
||||
|
||||
String result = Arrays.toString(msg);
|
||||
String result = msg.toString();
|
||||
Log.e(TAG, "onMessageResponse:" + result);
|
||||
logRece(result);
|
||||
}
|
||||
@@ -175,7 +178,7 @@ public class NettyServerActivity extends AppCompatActivity implements View.OnCli
|
||||
|
||||
@Override
|
||||
public void onChannelDisConnect(Channel channel) {
|
||||
Log.e(TAG, "onChannelDisConnect:ChannelId" + channel.id().asShortText());
|
||||
Log.d(TAG, "onChannelDisConnect:ChannelId is:" + channel.id().asShortText());
|
||||
|
||||
for (int i = 0; i < clientChanelArray.size(); i++) {
|
||||
final ClientChanel clientChanel = clientChanelArray.get(i);
|
||||
@@ -222,14 +225,18 @@ public class NettyServerActivity extends AppCompatActivity implements View.OnCli
|
||||
}
|
||||
|
||||
private void logSend(String log) {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mSendLogAdapter.getDataList().add(0, logBean);
|
||||
runOnUiThread(() -> mSendLogAdapter.notifyDataSetChanged());
|
||||
runOnUiThread(() -> {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mSendLogAdapter.getDataList().add(0, logBean);
|
||||
mSendLogAdapter.notifyDataSetChanged();
|
||||
});
|
||||
}
|
||||
|
||||
private void logRece(String log) {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mReceLogAdapter.getDataList().add(0, logBean);
|
||||
runOnUiThread(() -> mReceLogAdapter.notifyDataSetChanged());
|
||||
runOnUiThread(() -> {
|
||||
LogBean logBean = new LogBean(System.currentTimeMillis(), log);
|
||||
mReceLogAdapter.getDataList().add(0, logBean);
|
||||
mReceLogAdapter.notifyDataSetChanged();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user