发送消息正常,抓包工具监测可以监测到服务端收到并发出应答消息,客户端接收不到,防火墙已经关闭,、
客户端代码: package cn.encdata.service.signal.realtime.client;import java.net.InetSocketAddress;
import java.nio.charset.Charset;import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioDatagramConnector;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import cn.encdata.service.Config;//通信客户端
public class SocketClient
{
private ConnectFuture future = null;//连接对象
private boolean exit = false;
    private static Charset CS = Charset.forName("GBK");
    private IoSession session = null;//会话
    private static Logger log = LoggerFactory.getLogger(SocketClient.class);
    private static SocketClient client= null;
    
    private SocketClient()
    {
    
    }
    
    public static SocketClient instance()
    {
     if(client == null)
     {
     client = new SocketClient();
     }
     return client;
    }
    
public synchronized void start()
{
new Thread(new Runnable(){
            public void run(){connect();}
        }).start();
}
public synchronized void stop()
{
if(future!=null && future.isConnected())
{
future.getSession().close(true);
future = null;
exit = true;
}
} public synchronized void send(IoBuffer buffer)
{
if(buffer == null) return;
if(session == null || !session.isConnected())
{
log.info("通讯链路尚未创建,无法发送数据.");
return;
}
if(session.getAttribute("login") == null)
{
log.info("通讯链路尚未通过验证,无法发送数据.");
return;
}
session.write(buffer);
buffer.free();
}

private void connect()
{
while(!exit)
{
    if(future == null || !future.isConnected())
{
        IoConnector connector = null;
try 
{

    connector = new NioDatagramConnector();
    connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
    //connector.setConnectTimeoutMillis(Config.Server.ConnectTimeout);
    connector.setHandler(new SocketDataHandler());
    future = connector.connect(new InetSocketAddress("172.16.13.99",5555),new InetSocketAddress("172.163.133.200",8341));
    future.awaitUninterruptibly();
    if (!future.isConnected())
    {
        log.info(" 断线连接中{}:{}",Config.Server.IP,Config.Server.Port);
        Thread.sleep(Config.Server.ReconnectInterval);
        continue;
    }
    session = future.getSession();
    future.getSession().getCloseFuture().awaitUninterruptibly();
    future = null;
}
catch (Exception e)
{
log.error("创建通讯连接异常",e);
    break;
}
finally
{
    if(connector != null)
    {
        connector.dispose();
    }
}
    }
    try 
            {
Thread.sleep(Config.Server.ReconnectInterval);

            catch (InterruptedException e) 
{
e.printStackTrace();
}
        }
}
}
handler 类代码:
package  cn.encdata.service.signal.realtime.client;import java.nio.ByteOrder;import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import cn.encdata.service.Config;
import cn.encdata.service.signal.realtime.receive.handler.FaceHandler;public class SocketDataHandler extends IoHandlerAdapter
{
    private final Logger log = LoggerFactory.getLogger(SocketDataHandler.class);    @Override
    public void sessionOpened(IoSession session)
    {
        log.info("与服务器连接成功:"+session.getRemoteAddress());
       log.info("发送登录消息");
       //退出登录
       //session.write("退出登录\rsuper\r");
       session.write("登录系统\rsuper\r111\r");
    }
    @Override
public void sessionClosed(IoSession session) throws Exception 
{
     log.info("{}与服务器断线",session.getRemoteAddress());
   
}
    
    @Override
    public void messageReceived(IoSession session, Object message) 
    {  
    
    
         System.out.println("服务端端传来消息:"+message.toString());  
    
    
        
      
    }    @Override
    public  void sessionIdle(IoSession session, IdleStatus status) 
    {
     if (status == IdleStatus.BOTH_IDLE)  
     {
     //发送心跳包
     IoBuffer heartbeat = IoBuffer.allocate(2+1);
     heartbeat.order(ByteOrder.BIG_ENDIAN);
     //heartbeat.putUnsignedShort(1);
     //heartbeat.putUnsigned(0);
     //heartbeat.flip();
     log.info("发送心跳消息");
            session.write("客户端正常\rsuper\r");
     }
    }
    
    @Override  
    public void sessionCreated(IoSession session) throws Exception {  //当创建一个新的连接时被触发,即开始一个新的session是被触发
        log.info("sessionCreated");
     session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 20);  
    }    @Override
    public void messageSent(IoSession session, Object message) 
    {
       
    }
    
    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
    {
     log.error(cause.getMessage(),cause);
    }
    
    
    public static String stringToAscii(String value)  
    {  
        StringBuffer sbu = new StringBuffer();  
        char[] chars = value.toCharArray();   
        for (int i = 0; i < chars.length; i++) {  
            if(i != chars.length - 1)  
            {  
                sbu.append((int)chars[i]).append(",");  
            }  
            else {  
                sbu.append((int)chars[i]);  
            }  
        }  
        return sbu.toString();  
    }  
    
    
    public static String asciiToString(String value)  
    {  
        StringBuffer sbu = new StringBuffer();  
        String[] chars = value.split(",");  
        for (int i = 0; i < chars.length; i++) {  
            sbu.append((char) Integer.parseInt(chars[i]));  
        }  
        return sbu.toString();  
    }  
    
    public static void main(String[] args) {
        
        String str = "BFCDBBA7B6CBD5FDB3A30D 73 75 70 65 72 0D ";
        String asciiResult = hexStringToString(str);
        System.out.println(asciiResult);
       // String stringResult = asciiToString(asciiResult);
       // System.out.println(stringResult);
       }
    public static String hexStringToString(String s) {
        if (s == null || s.equals("")) {
            return null;
        }
        s = s.replace(" ", "");
        byte[] baKeyword = new byte[s.length() / 2];
        for (int i = 0; i < baKeyword.length; i++) {
            try {
                baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            s = new String(baKeyword, "GBK");
            new String();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return s;
    }
}求解惑