0

Apache Mina Tcp サーバーと java.net.Socket クライアントにネットワーク プログラムを作成しています。

サーバーコード

    SimpleIoProcessorPool<NioSession> pool = new SimpleIoProcessorPool<NioSession>(NioProcessor.class, 20);

    SocketAcceptor acceptor = new NioSocketAcceptor(pool);
    acceptor.setReuseAddress(true);

    // Add two filters : a logger and a codec

    acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
    acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    acceptor.setHandler( new TimeServerHandler() );

    // Configurate the buffer size and the iddle time
    acceptor.getSessionConfig().setReadBufferSize( 2048 );
    acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 1 );

    acceptor.bind( new InetSocketAddress(8001) );

そして、私のサーバーハンドラーは、

public class TimeServerHandler extends IoHandlerAdapter{

@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{

    System.out.println("messagereceived");


    String str = message.toString();
    System.out.println(str);

    if( str.trim().equalsIgnoreCase("quit") ) {
        session.close(true);
        return;
    }

    Date date = new Date();

    System.out.println("Writing to client");

    session.write( date);
}

}

私のソケットクライアントは

        InetAddress inetAddress = InetAddress.getByName("localhost");
        Socket socket = new Socket(inetAddress, 8001);

        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        bufferedWriter.write("Test");
        bufferedWriter.flush();

        System.out.println(bufferedReader.readLine());

        System.out.println("Done....");

        bufferedWriter.close();
        bufferedReader.close();

問題は、サーバー ソケットが java.net.socket と通信しないことです。誰かが間違っていることを言うことができますか..

4

1 に答える 1

1

サーバー コードでは、この LineDelimiter("$") に置き換えます。「$」はデコード区切り文字です。

 acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.DEFAULT, new LineDelimiter("$"))));

このリンクを確認してください http://mina.apache.org/mina-project/userguide/ch9-codec-filter/ch9-codec-filter.html

于 2014-07-10T12:00:23.923 に答える