Mina 不能接收哦服务器返回信息!!

jianglan 发布于 2012/02/23 15:55
阅读 3K+
收藏 0
Mina 客户端向一前端设备发送请求,该设备返回接收成功消息给客户端,而客户端不能接收该返回信息!!应该代码问题,因为我向Mina 服务器发送消息时能接收到返回信息,而改为C语言服务器时就不能接收!!急,急,急....
加载中
0
arron三叔
arron三叔
贴代码吧,
jianglan
jianglan
我贴出了客户端代码!!!服务器是前端设备,他们用C做的!!
0
jianglan
jianglan


import java.net.InetSocketAddress;
import java.nio.charset.Charset;

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.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
 * 
 * @author jl
 *客戶端的配置信息
 */
public class Client {

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

// Create TCP/IP connection
NioSocketConnector connector = new NioSocketConnector();
// 创建接受数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
// 设定这个过滤器将一行一行(/r/n)的读取数据
// chain.addLast("logger", new LoggingFilter());
chain.addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"))));
// 服务器的消息处理器:一个SamplMinaServerHander对象
connector.setHandler(new ClientHander());
// 连接到服务器:
ConnectFuture future = connector.connect(new InetSocketAddress("192.168.1.239",
8080));
future.awaitUninterruptibly();
future.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
}

}
0
jianglan
jianglan


import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ClientHander extends IoHandlerAdapter {
Logger log = LoggerFactory.getLogger(ClientHander.class);

@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
// TODO Auto-generated method stub
cause.printStackTrace();
session.close(true);

}

/**
* 当客户端接受到消息时
*/
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// Writer the received data back to remote peer
log.info("收到服务器返回的消息: " + message.toString());

}

/**
* 当一个客户端被关闭时
*/
@Override
public void sessionClosed(IoSession session) throws Exception {
log.info("該連接已經成功斷開!");

}

/**
* 当一个客户端连接进入时
*/
@Override
public void sessionOpened(IoSession session) throws Exception {
log.info("遠程連接的服務器地址:" + session.getRemoteAddress());
// String message = "BEGIN100104005out:1";
String message = "BEGIN100101013setheart:00011";
log.info("客戶端發送的指令:" + message);
session.write(message);
}

}
0
倔强的土豆
倔强的土豆

老兄,此问题解决了吗,我这遇到了,如果能提供下答案,感激不尽啊!

倔强的土豆
倔强的土豆
回复 @zerochen : 谢谢老兄,我也搞定了,自己重写了解码器。
zerochen
zerochen
我搞定了,是我自己定义的 http 编解码器没有处理 response部分~
0
yak
yak
有没有写过websocket的解码器?我照 https://issues.apache.org/jira/browse/DIRMINA-907 这上面的写了一个,但是 WebSocketEncoder 的encode方法只有第一次握手会执行,后面的数据包就不执行了
0
yak
yak
@zerochen 有没有写过websocket的解码器?我照 https://issues.apache.org/jira/browse/DIRMINA-907 这上面的写了一个,但是 WebSocketEncoder 的encode方法只有第一次握手会执行,后面的数据包就不执行了
返回顶部
顶部