在學(xué)習(xí)mina框架時(shí)我重寫(xiě)了public void inputClosed(IoSession is) 方法然后我在關(guān)閉客戶端連接時(shí)出現(xiàn)了這個(gè)方法的不斷調(diào)用 下面是我的代碼,請(qǐng)問(wèn)有人遇到過(guò)嗎package?mina;
import?org.apache.mina.core.service.IoHandler;
import?org.apache.mina.core.session.IdleStatus;
import?org.apache.mina.core.session.IoSession;
class?MyHandler?implements?IoHandler?{
????public?MyHandler()?{
????}
????@Override
????public?void?sessionCreated(IoSession?is)?throws?Exception?{
????????System.out.println("create");
????}
????@Override
????public?void?sessionOpened(IoSession?is)?throws?Exception?{
????????System.out.println("opensession");
????}
????@Override
????public?void?sessionClosed(IoSession?is)?throws?Exception?{
????????System.out.println("session?close");
????}
????@Override
????public?void?sessionIdle(IoSession?is,?IdleStatus?is1)?throws?Exception?{
????????System.out.println("session?idle");
????}
????
????
????@Override
????public?void?exceptionCaught(IoSession?is,?Throwable?thrwbl)?throws?Exception?{
????????System.out.println("except");
????}
????@Override
????public?void?messageReceived(IoSession?is,?Object?o)?throws?Exception?{
????????
????????System.out.println("msg?rec"+(String)o);
????????is.write((String)o);
????}
????@Override
????public?void?messageSent(IoSession?is,?Object?o)?throws?Exception?{
????????System.out.println("msg?sent");
????}
????@Override
????public?void?inputClosed(IoSession?is)?throws?Exception?{
????????System.out.println("close");
????}
????
}package?mina;
import?java.io.IOException;
import?java.net.InetSocketAddress;
import?java.util.logging.Level;
import?java.util.logging.Logger;
import?org.apache.mina.filter.codec.ProtocolCodecFilter;
import?org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import?org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public?class?SocketServer?{
????public?static?void?main(String[]?args)?{
????????try?{
????????????NioSocketAcceptor?accepter?=new?NioSocketAcceptor();
????????????accepter.setHandler(new?MyHandler());
????????????accepter.getFilterChain().addLast("codec",?new?ProtocolCodecFilter(?new?TextLineCodecFactory()));
????????????accepter.bind(new?InetSocketAddress(9427));
????????}?catch?(IOException?ex)?{
????????????Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE,?null,?ex);
????????}
????}
}package?ps.mc.chartT;
import?java.io.BufferedReader;
import?java.io.BufferedWriter;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.io.OutputStreamWriter;
import?java.net.Socket;
import?java.util.logging.Level;
import?java.util.logging.Logger;
public?class?SocketClient?{
????public?static?void?main(String[]?args)?{
???? Socket?socket=null;
???? BufferedReader?inputReader=null;
????????BufferedWriter?outputWriter=null;
????????try?{
????????????socket?=new?Socket("127.0.0.1",9427);
????????????inputReader?=new?BufferedReader(new?InputStreamReader(System.in));
????????????outputWriter?=new?BufferedWriter(new?OutputStreamWriter(socket.getOutputStream()));
????????????String?content;
????????????while(!(content=inputReader.readLine()).equals("bye")){
????????????????outputWriter.write(content+"\n");
????????????????outputWriter.flush();
????????????}
????????}?catch?(IOException?ex)?{
????????????Logger.getLogger(SocketClient.class.getName()).log(Level.SEVERE,?null,?ex);
????????}finally{
???????? try?{
inputReader.close();
outputWriter.close();
socket.close();
}?catch?(IOException?e)?{
//?TODO?自動(dòng)生成的?catch?塊
e.printStackTrace();
}
????????
????????}
????}
}
3 回答

慕UI4579374
TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
@Override
public void inputClosed(IoSession session) throws Exception {
session.closeNow();
}
將session 關(guān)閉就可以了。

慕數(shù)據(jù)1388444
TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
這個(gè)問(wèn)題有沒(méi)有實(shí)際解決? 看源碼是因?yàn)閟elect一直認(rèn)為是需要處理狀態(tài)。 ?尚未找到很好的解決辦法。
添加回答
舉報(bào)
0/150
提交
取消