2025年2月27日12:22:05 sokcet 连接断开异常处理
parent
89025e4c34
commit
3b19085717
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,17 @@ 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());
|
Router handler = this.apis.get(request.GetMsgID());
|
||||||
|
if (handler != null ){
|
||||||
//执行对应处理方法
|
//执行对应处理方法
|
||||||
handler.PreHandle(request);
|
handler.PreHandle(request);
|
||||||
handler.Handle(request);
|
handler.Handle(request);
|
||||||
handler.PostHandle(request);
|
handler.PostHandle(request);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void AddRouter(int msgId, Router router) {
|
public void AddRouter(int msgId, Router router) {
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,9 @@ public class RequestImpl implements Request {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetMsgID() {
|
public int GetMsgID() {
|
||||||
|
if (this.message != null) {
|
||||||
return this.message.GetMsgId();
|
return this.message.GetMsgId();
|
||||||
}
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue