使用mina框架傳輸對象實體方法如下:
對像實體
public class TransDataEntity {
private String md5;
private String path;
private String fromIP;
private byte[] filedata;
public String getMd5() {
return md5;
}
public void setMd5(String md5) {
this.md5 = md5;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getFromIP() {
return fromIP;
}
public void setFromIP(String fromIP) {
this.fromIP = fromIP;
}
public byte[] getFiledata() {
return filedata;
}
public void setFiledata(byte[] filedata) {
this.filedata = filedata;
}
}
服務端處理類
import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class ServerHandler extends IoFilterAdapter implements IoHandler {
private static ServerHandler samplMinaServerHandler = null;
public static ServerHandler getInstances() {
if (null == samplMinaServerHandler) {
samplMinaServerHandler = new ServerHandler();
}
return samplMinaServerHandler;
}
private ServerHandler() {
}
// 當連接後打開時觸發此方法,一般此方法與 sessionCreated 會被同時觸發
public void sessionOpened(IoSession session) throws Exception {
}
public void sessionClosed(IoSession session) {
}
public void messageReceived(IoSession session, Object message) throws Exception {
if (message instanceof TransDataEntity) {
TransDataEntity text = (TransDataEntity) message;
System.out.println("服務器接收到從客戶端的getFromIP:" + text.getFromIP());
System.out.println("服務器接收到從客戶端的getMd5:" + text.getMd5());
System.out.println("服務器接收到從客戶端的getPath:" + text.getPath());
System.out.println("服務器接收到從客戶端的文件內容:" + new String(text.getFiledata(), "GBK"));
}
}
public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception {
}
// 當消息傳送到客戶端後觸發
public void messageSent(IoSession arg0, Object arg1) throws Exception {
}
// 當一個新客戶端連接後觸發此方法.
public void sessionCreated(IoSession arg0) throws Exception {
}
// 當連接空閒時觸發此方法.
public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
}
}
服務端程序
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.koubei.syn.utils.ConfigUtils;
public class MainServer {
private static MainServer mainServer = null;
private SocketAcceptor acceptor = new NioSocketAcceptor();
private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
private int bindPort = ConfigUtils.PORT;
public static MainServer getInstances() {
if (null == mainServer) {
mainServer = new MainServer();
}
return mainServer;
}
private MainServer() {
chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
acceptor.setHandler(ServerHandler.getInstances());
try {
acceptor.bind(new InetSocketAddress(bindPort));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
MainServer.getInstances();
}
}
客戶段處理類
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class ClientHandler extends IoHandlerAdapter {
private static ClientHandler samplMinaClientHandler = null;
public static ClientHandler getInstances() {
if (null == samplMinaClientHandler) {
samplMinaClientHandler = new ClientHandler();
}
return samplMinaClientHandler;
}
private ClientHandler() {
}
public void sessionOpened(IoSession session) throws Exception {
session.write("客戶端與服務器的會話打開了……");
}
public void sessionClosed(IoSession session) {
}
public void messageReceived(IoSession session, Object message) throws Exception {
}
public void messageSent(IoSession session, Object tdEntity) throws Exception {
if (null != tdEntity){
session.write(tdEntity);
}
System.out.println("客戶端已經向服務器發送了:");
}
}
客戶端
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
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.koubei.syn.utils.ConfigUtils;
public class MainClient {
private static MainClient mainClient = null;
NioSocketConnector connector = new NioSocketConnector();
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
public static MainClient getInstances() {
if (null == mainClient) {
mainClient = new MainClient();
}
return mainClient;
}
private MainClient() {
}
/**
* @author 展俊
* @description 客戶端傳數據給服務器端
* @param groupips ip數組 127.0.0.1,127.0.0.2 ...
* @param msg 數據實體
*
*/
public void messgeSent(String[] groupips, Object msg) {
chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
connector.setHandler(ClientHandler.getInstances());
connector.setConnectTimeoutMillis(30);
if ((null != groupips) && (groupips.length > 0)) {
try {
for (String ip : groupips) {
ConnectFuture cf = connector.connect(new InetSocketAddress(ip, ConfigUtils.PORT));
connector.getHandler().messageSent(cf.getSession(), msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}