プロトコル名 | ポート番号/プロトコル |
echo | 7/udp |
ftp-data | 20/tcp,udp |
ftp | 21/tcp,udp |
telnet | 23/tcp,udp |
smtp | 25/tcp,udp |
time | 37/tcp,udp |
nameserver | 42/tcp,udp |
nicname | 43/tcp,udp |
domain | 53/tcp,udp |
tftp | 69/tcp,udp |
gopher | 70/tcp,udp |
finger | 79/tcp,udp |
http | 80/tcp,udp |
pop3 | 110/tcp,udp |
sqlserv | 118/tcp,udp |
nntp | 119/tcp,udp |
ntp | 123/tcp,udp |
netbios-ns | 137/tcp,udp |
netbios-dgm | 138/tcp,udp |
snmp | 161/tcp,udp |
irc | 194/tcp,udp |
exec | 512/tcp |
biff | 512/udp |
who | 513/udp |
timed | 525/tcp,udp |
mainメソッドではソケットを作り、そのソケットにクライアントが接続するまで待ち、接続されたら実際に動作するEchoServerを新しいスレッドで動作させます。
EchoServerクラスでは、まず、そのソケットがどこから接続されたかの情報を表示します。たとえば、
次にクライアント側のソースを見てください。
このプログラムは'A'という文字を128個localhostという名前のhostに送ります。
localhostというのは特殊なhost名で、ループバックテスト用に用いられます。この場合はサーバーもクライアントも同じマシン上にあることになります。これは当然自分自身のhost名、IPアドレスでも可能です。マシンを変えたときにソースも変える必要が無いので用います。まず、同じマシン上でテストしてから他のマシンと通信実験を行います。
らコンストラクタにてこれから行うことを表示し、ソケットをサーバーのechoportに接続し入出力ストリームを作ります。設定した個数(128)サーバーに送り、サーバーから送り返されたデータを入力し、標準出力に出力します。最後に接続を切ります。
実行方法
サーバー側を先に起動させてから、クライアント側を起動させます。
問題6-1
サーバー、クライアント側のプログラムを作り、サーバーをTINI、 クライアントをパソコン側で動かしその動作の確認をしなさい。
このプログラムではクライアント側から'A'を送っているのに'A'が表示されないのは何故か? ソースプログラムを修正して正しく表示するようにしなさい。
問題6-2
提示しているソースプログラムではサーバー側の表示が文字化けします。これはTINIの中のJavaVMが日本語対応になっていないためですが、対策はあります。
System.out.println("EchoServer 開始..."); の部分は System.out.println("EchoServer \u008A\u004A\u008E\u006E..."); とすれば表示できます。この謎を解いて他の場所も文字化けの無いように修正しなさい。