手始めにポートをlistenして、入力デーアを標準出力に出すサーバーを書こうと思います。
telnetで適当に接続して受け取ったデータをそのまま画面に出力する。というものです。
仕様
- 8080ポートをlistenするサーバーを書く。
- メッセージを取得したら、System.out.printlnで出力する。
それだけ。
まず、Javaが必要とするライブラリ群
- mina-core-2.0.0-RC1.jar
- slf4j-api-1.5.10.jar
- log4j-ober-slf4j-1.5.10.jar
- logback-classic-0.9.18.jar
- logback-core-0.9.18.jar
これらをclasspath通すかEclipseつかっているならBuildPathのライブラリにいれればOK
package com.ttProject.webSocket;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
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.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
/**
* WebSocketサーバープログラム
* @author taktod
*/
public class Main {
private static final int PORT = 8080;
/**
* エントリー
* @param args
*/
public static void main(String[] args) {
try {
new Main();
}
catch(Exception e) {
// すぐ終了するのでなにもしない。
}
}
/**
* コンストラクタ
*/
public Main() throws Exception{
SocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new EchoHandler());
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("ServerStarted!!");
}
/**
* データ処理ハンドラー
* echoのみ
*/
private static class EchoHandler extends IoHandlerAdapter {
/**
* メッセージをうけとったときの処理
*/
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// TODO Auto-generated method stub
System.out.println(message.toString());
super.messageReceived(session, message);
}
}
}
コーデックをテキストベースでつくって、EchoハンドラーでメッセージをうけとったらSystem.out.printlnで出力する
それだけです。
動かすと以下のようになる。
サーバー側
ServerStarted!!
08:49:41.217 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - Processing a MESSAGE_RECEIVED for session 1
a
08:49:44.557 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - Processing a MESSAGE_RECEIVED for session 1
b
08:49:44.983 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - Processing a MESSAGE_RECEIVED for session 1
c
08:49:45.298 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - Processing a MESSAGE_RECEIVED for session 1
d
08:49:45.613 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - Processing a MESSAGE_RECEIVED for session 1
e
08:49:45.939 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - Processing a MESSAGE_RECEIVED for session 1
f
コンソール
$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
a
b
c
d
e
f
^]
telnet> q
Connection closed.
これでおしまい。
最終更新:2011年02月11日 08:51