2025年2月27日12:22:05 sokcet 连接断开异常处理

master
qmstyle 2025-02-27 12:22:38 +08:00
parent 89025e4c34
commit 3b19085717
5 changed files with 39 additions and 20 deletions

View File

@ -34,6 +34,7 @@ public class DataPackImpl implements DataPack {
dataMsg.setSequenceId(0);
dataMsg.setData(msg.GetData());
dataMsg.setDataLen(msg.GetDataLen());
dataMsg.setMsgId(msg.GetMsgId());
try {
ByteBuf out = Unpooled.buffer();
@ -93,6 +94,7 @@ public class DataPackImpl implements DataPack {
Message message = new MessageImpl();
message.SetData(dataMsg.getData());
message.SetDataLen(dataMsg.getDataLen());
message.SetMsgId(dataMsg.getMsgId());
return message;
} catch (IOException | ClassNotFoundException e) {
// throw new RuntimeException(e);
@ -107,6 +109,16 @@ public class DataPackImpl implements DataPack {
private byte[] data;
private int dataLen;
private int msgId;
public int getMsgId() {
return msgId;
}
public void setMsgId(int msgId) {
this.msgId = msgId;
}
public int getSequenceId() {
return sequenceId;
}

View File

@ -19,12 +19,12 @@ public class HelloRouter extends BaseRouterImpl {
@Override
public void Handle(Request request) {
log.info("Call HelloZinxRouter Handle");
log.info("Call HelloRouter Handle");
//先读取客户端的数据再回写ping...ping...ping
log.info("recv from client : msgId={}, data={}", request.GetMsgID(), new String(request.GetData(), StandardCharsets.UTF_8));
try {
OutputStream outputStream = request.GetConnection().GetTCPConnection().getOutputStream();
ByteBufferUtil.sendMsg(1, "Hello Zinx Router V0.6".getBytes(), outputStream);
ByteBufferUtil.sendMsg(1, "Hello Router V0.6".getBytes(), outputStream);
} catch (IOException e) {
e.printStackTrace();
}

View File

@ -22,12 +22,16 @@ public class MsgHandleImpl implements MsgHandle {
@Override
public void DoMsgHandler(Request request) {
if (request != null){
Router handler = this.apis.get(request.GetMsgID());
if (handler != null ){
//执行对应处理方法
handler.PreHandle(request);
handler.Handle(request);
handler.PostHandle(request);
}
}
Router handler = this.apis.get(request.GetMsgID());
//执行对应处理方法
handler.PreHandle(request);
handler.Handle(request);
handler.PostHandle(request);
}
@Override

View File

@ -47,6 +47,9 @@ public class RequestImpl implements Request {
}
public int GetMsgID() {
return this.message.GetMsgId();
if (this.message != null) {
return this.message.GetMsgId();
}
return -1;
}
}

View File

@ -1,5 +1,7 @@
package com.zhangmeng;
import com.zhangmeng.utils.ByteBufferUtil;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
@ -22,22 +24,20 @@ public class AppTest {
//创建 Socket 对象,指定服务器端的 IP 与端口
socket = new Socket(InetAddress.getLocalHost(), 9999);
//获取 scoket 的输入输出流接收和发送信息
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
//获取 scoket 的输入输出流接收和发送信息
in = new BufferedReader(new InputStreamReader(inputStream));
out = new BufferedWriter(new OutputStreamWriter(outputStream));
br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
//发送信息
String str = br.readLine();
out.write(str + "\n");
out.flush();
//如果输入的信息为“end”则终止连接
if (str.equals("end")) {
break;
}
//否则,接收并输出服务器端信息
System.out.println("服务器端说:" + in.readLine());
// Thread.sleep(1000);
//发送信息
ByteBufferUtil.sendMsg(0, str.getBytes(), outputStream);
//接收信息
ByteBufferUtil.recvMsg(inputStream, -1);
}
} catch (UnknownHostException e) {
e.printStackTrace();