簡単なサーバ


echoサーバ

テキストデータをやりとりするサーバは以下のように書きます。 このサーバは接続してきたクライアントが送ってくる文字列を そのまま送り返します。

ネットワーク接続で文字列を送信する時は、復帰'\r'と改行'\n'の両方の文字を 送信することが推奨されています。 そのため下のプログラムの中では明示的に行末に"\r\n"を出力しています。

データを送信するメソッドを呼び出しただけでは相手にデータが送られず、 まだバッファの中にデータが残っていることに注意をして下さい。 確実に送出するためには、明示的にflush()を呼び出します。 こちらから送出するデータが完全に相手に送られていない状態で、 相手からのデータの読み込みを行うと、 デッドロックが生じる可能性があるので注意が必要です。



RunEchoServer.javaの実行例
$ javac RunEchoServer.java 
$ java RunEchoServer 8888 
accept: localhost.localdomain
read: abc
wrote: abc
read: def
wrote: def
done
クライアント側の実行例
$ javac RunTransTextClient.java 
$ java RunTransTextClient localhost 8888 
abc 
abc
def 
def
^C   ←Control+C で終了する

改行コードについて

「改行コード」とは「テキストデータにおいて行の終わりを表す文字」 のことです。

改行を表す文字列はOSによって異なることに注意しましょう。

ASCIIコードJavaでの文字表記記号名前日本語名
0x0d'\r'CRCarriage Return復帰
0x0a'\n'LFまたはNLLine FeedまたはNew Line改行

アスキー コード 表 (ASCII Code 表)

0(16) 1(16) 2(16) 3(16) 4(16) 5(16) 6(16) 7(16) 8(16) 9(16) a(16) b(16) c(16) d(16) e(16) f(16)
00(16) NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT NP CR SO SI
10(16) DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
20(16) SP ! # $ % & ' ( ) * + , - . /
30(16) 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40(16) @ A B C D E F G H I J K L M N O
50(16) P Q R S T U V W X Y Z [ \ ] ^ _
60(16) ` a b c d e f g h i j k l m n o
70(16) p q r s t u v w x y z { | } ~ DEL