ApacheMinaをつかってtelnet応答するサーバーをつくる。

手始めにポートを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.
 

これでおしまい。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月11日 08:51
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。