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

View File

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

View File

@ -22,12 +22,16 @@ public class MsgHandleImpl implements MsgHandle {
@Override @Override
public void DoMsgHandler(Request request) { 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 @Override

View File

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