java mina文件传输_使用Mina传输Java对象

This is apache-mina-2.0.4, please drink code....

下面是所要传输的实体类UserInfo.java

package com.mina.model;

import java.io.Serializable;

/**

* @see Mina传输的实体类,要求其实现Serializable接口

*/

@SuppressWarnings("serial")

public class UserInfo implements Serializable{

private String name;

public UserInfo(String name){

this.name = name;

}

public String getName() {

return name;

}

}

下面是Mina编写的服务端主类MyServer.java

package com.mina.server;

import java.io.IOException;

import java.net.InetSocketAddress;

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.serialization.ObjectSerializationCodecFactory;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MyServer {

public static void main(String[] args) throws IOException {

int bindPort = 9876;

IoAcceptor acceptor = new NioSocketAcceptor();

acceptor.getSessionConfig().setReadBufferSize(2048);

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

//设定服务器解析消息的规则是以Object对象为单位进行传输,注意此时该对象需实现Serializable接口

acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

acceptor.setHandler(new ServerHandler());

acceptor.bind(new InetSocketAddress(bindPort));

System.out.println("MinaServer is startup, and it`s listing on := " + bindPort);

}

}

下面是服务端的消息处理器ServerHandler.java

package com.mina.server;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IoSession;

import com.mina.model.UserInfo;

public class ServerHandler extends IoHandlerAdapter {

@Override

public void messageReceived(IoSession session, Object message) throws Exception {

UserInfo ui = (UserInfo)message; //我们已设定了服务器解析消息的规则是以UserInfo对象为单位进行传输

System.out.println("收到客户机发来的用户名:" + ui.getName());

session.write(new UserInfo(ui.getName() + "==>>是个神秘的人"));

}

@Override

public void sessionOpened(IoSession session) throws Exception{

System.out.println("InComing Client:" + session.getRemoteAddress());

}

}

接下来是Mina编写的客户端主类MyClient.java

package com.mina.client;

import java.net.InetSocketAddress;

import org.apache.mina.core.service.IoConnector;

import org.apache.mina.filter.codec.ProtocolCodecFilter;

import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;

import org.apache.mina.transport.socket.nio.NioSocketConnector;

import com.mina.model.UserInfo;

public class MyClient {

public static void main(String[] args) {

IoConnector connector = new NioSocketConnector();

connector.setConnectTimeoutMillis(30000);

connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

connector.setHandler(new ClientHandler(new UserInfo("张起灵")));

connector.connect(new InetSocketAddress("127.0.0.1", 9876));

}

}

最后是客户端的消息处理器ClientHandler.java

package com.mina.client;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IoSession;

import com.mina.model.UserInfo;

public class ClientHandler extends IoHandlerAdapter {

private final UserInfo ui;

public ClientHandler(UserInfo ui){

this.ui = ui;

}

@Override

public void sessionOpened(IoSession session) throws Exception {

session.write(ui);

}

@Override

public void messageReceived(IoSession session, Object message) throws Exception {

UserInfo ui = (UserInfo)message;

System.out.println("收到服务机发来的用户名:" + ui.getName());

}

@Override

public void exceptionCaught(IoSession session, Throwable cause) throws Exception {

System.out.println("与" + session.getRemoteAddress() + "通信过程中出现错误:[" + cause.getMessage() + "]..连接即将关闭....");

session.close(false);

session.getService().dispose();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值