Mina 客户端向机器发送指令
秋分中的雨 2017-08-26 12:02:47 Mina架构的客户端向机器发送指令,获取机器返回信息。指令为单条指令,是没有问题,怎么实现发送多条指令,分别获取每条指令返回的信息。代码如下:
MyClientHandler 代码:
package com.hanvon.sdk.mina.client;
import java.util.logging.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import Com.FirstSolver.Splash.FaceIdProtocolCodecFactory;
public class MyClientHandler extends IoHandlerAdapter {
private Logger logger = Logger.getLogger(this.getClass().getName());
public String port;
public MyClientHandler(String port){
this.port = port;
}
public void sessionOpened(IoSession session) throws Exception {
FaceIdProtocolCodecFactory.setEncoderKey(session, port);
FaceIdProtocolCodecFactory.setDecoderKey(session, port);
}
public void messageReceived(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
String messageStr = message.toString();
logger.info("receive a message is : " + messageStr);
System.out.println("receive a message is : " + messageStr);
}
public void messageSent(IoSession session, Object message) throws Exception {
logger.info("客户端发了一个信息:" + message.toString());
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
SimpleMinaClient代码:
package com.hanvon.sdk.mina.client;
import java.net.InetSocketAddress;
import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.logging.LogLevel;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.SocketConnector;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import Com.FirstSolver.Splash.FaceIdProtocolCodecFactory;
public class SimpleMinaClient {
public SocketConnector connector = null;
public ConnectFuture future;
public IoSession session = null;
SimpleMinaClient(){
}
boolean connect(){
try{
connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(3000);
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new FaceIdProtocolCodecFactory("GBK", false, false)));
LoggingFilter log = new LoggingFilter();
log.setMessageReceivedLogLevel(LogLevel.INFO);
connector.getFilterChain().addLast("logger", log);
connector.setHandler(new MyClientHandler(9905));
future = connector.connect(new InetSocketAddress("192.168.1.18", 9922));
future.awaitUninterruptibly();
session = future.getSession();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
public void setAttribute(Object key , Object value){
session.setAttribute(key, value);
}
void sentMsg(String message){
session.write(message);
}
boolean close(){
CloseFuture future = session.getCloseFuture();
future.awaitUninterruptibly(1000);
connector.dispose();
return true;
}
public SocketConnector getConnector() {
return connector;
}
public IoSession getSession() {
return session;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleMinaClient client = new SimpleMinaClient();
if(client.connect()){
client.sentMsg("GetEmployee(id=\"123\")");
client.close();
}
}
}