服务端:
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
public class minaServer {
static int PORT = 666;
static IoAcceptor acceptor = null;
public static void main(String[] args) {
try {
acceptor = new NioSocketAcceptor();
// 设置编码格式
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())
));
// 设置缓冲区
acceptor.getSessionConfig().setReadBufferSize(1024);
// 10ms不操作进入空闲状态
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
// 设置处理handler
acceptor.setHandler(new Myhandler());
// 绑定端口
acceptor.bind(new InetSocketAddress(PORT));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Server:__>"+PORT);
}
}
Myhandler:
public class Myhandler extends IoHandlerAdapter {
public Myhandler() {
super();
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("Session Created");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("Session Opened");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("Session Closed");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("Session Idle");
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("exception Caught");
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
String msg = (String) message;
System.out.println("服务端接收数据");
System.out.println(msg);
if(msg.equals("exit")){
session.close();
}
Date date = new Date();
session.write(date);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent");
}
}
尝试访问:
python:
import socket
import time
import json
host = '127.0.0.1'
port = 666
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) #在客户端开启心跳维护
client.connect((host, port))
print("连接成功")
while(True):
a = input("请输入信息")
client.send((a + "\r\n").encode())
print('send data')
time.sleep(1)
输出:
Server:__>666
Session Created
Session Opened
服务端接收数据
123
messageSent
服务端接收数据
nihao
messageSent
服务端接收数据
泥豪
messageSent
服务端接收数据
exit
Session Closed
总结:
1.NioSocket
2.设置编码解码过滤器
3.设置一些session属性
4.绑定一个端口