package org.example;
import org.tio.core.intf.Packet;
public class HelloPacket extends Packet {
private static final long serialVersionUID = -172060606924066412L;
public static final int HEADER_LENGTH = 4;
public static final String CHARSET = "utf-8";
private byte[] body;
public byte[] getBody() {
return body;
}
public void setBody(byte[] body) {
this.body = body;
}
}
<dependencies>
<dependency>
<groupId>org.t-io</groupId>
<artifactId>tio-core</artifactId>
<version>3.7.5.v20211028-RELEASE</version>
</dependency>
</dependencies>
package org.example;
import org.tio.core.ChannelContext;
import org.tio.core.TioConfig;
import org.tio.core.intf.Packet;
import org.tio.server.intf.ServerAioHandler;
import org.tio.core.exception.AioDecodeException;
import java.nio.ByteBuffer;
import java.util.Arrays;
public class HelloServerAioHandler implements ServerAioHandler {
@Override
public HelloPacket decode(ByteBuffer buffer, int limit, int position, int readableLength, ChannelContext channelContext) throws AioDecodeException {
byte[] dst = new byte[readableLength];
HelloPacket imPacket = new HelloPacket();
buffer.get(dst);
imPacket.setBody(dst);
return imPacket;
}
@Override
public ByteBuffer encode(Packet packet, TioConfig tioConfig, ChannelContext channelContext) {
HelloPacket helloPacket = (HelloPacket) packet;
byte[] body = helloPacket.getBody();
int bodyLen = 0;
if (body != null) {
bodyLen = body.length;
}
int allLen = HelloPacket.HEADER_LENGTH + bodyLen;
ByteBuffer buffer = ByteBuffer.allocate(allLen);
buffer.order(tioConfig.getByteOrder());
buffer.putInt(bodyLen);
if (body != null) {
buffer.put(body);
}
return buffer;
}
@Override
public void handler(Packet packet, ChannelContext channelContext) throws Exception {
HelloPacket helloPacket = (HelloPacket) packet;
byte[] body = helloPacket.getBody();
System.out.println("收到消息");
if (body != null) {
String str = new String(body, HelloPacket.CHARSET);
System.out.println("收到消息来自客户端:" + channelContext.getId() + "的消息:" + str);
}
}
}
package com.example.tio.tio;
import org.tio.server.ServerTioConfig;
import org.tio.server.TioServer;
import org.tio.server.intf.ServerAioHandler;
import org.tio.server.intf.ServerAioListener;
import java.io.IOException;
public class Starter {
public static ServerAioHandler aioHandler = new MyServerHandler();
public static ServerAioListener aioListener = new MyServerListener();
public static ServerTioConfig serverTioConfig = new ServerTioConfig("hello-server", aioHandler, aioListener);
public static TioServer tioServer = null;
public static String serverIp = null;
public static int serverPort = 3100;
public static void run() throws IOException {
serverTioConfig.setHeartbeatTimeout(90000);
tioServer = new TioServer(serverTioConfig);
tioServer.start(serverIp, serverPort);
}
}