2台のコンピュータの接続

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

サーバ側

ServerSocketクラスのオブジェクトをインスタンス化してサーバをスタートさせます。
此の時、サーバが使用するポート番号を指定します。

sSock = new ServerSocket(ポート番号);

acceptメソッドで、クライアントからの接続要求を待ちます。
受信すると、Socketクラスのオブジェクトを受け取ります。

sock = new sSock.accept();

受け取ったSocketクラスのオブジェクトを調べる事により、接続を要求して来たクライアントのIPアドレスを知れます。

InetAddress sockIP = sock.getInetAddress();

クライアント側

Socketクラスのオブジェクトをインスタンス化する事により、サーバに接続要求を出します。
此の時、要求先のマシンのホスト名又はIPアドレスとポート番号を指定します。

sock = new Socket("サーバ名", ポート番号);

接続を終了する時は、ソケットをクローズします。

sock.close();

此のプログラムでは、ホスト名(又はIPアドレス)とポート番号は、プログラム起動時にコマンドから指定する事にしましょう。

ストリームの確立

データの送受信をするには、先ず、御互いのデータの通り道を作ります。
Socketクラスには、InputStreamとOutputStreamを取得するメソッドが用意されています。

InputStream fin = sock.getInputStream();
OutputStream fout = sock.getOutputStream();

此等のストリームをラップして、文字列を扱える様にしましょう。

BufferedReader in = new BufferedReader(new InputStreamReader(fin));
PrintWriter out = new PrintWriter(fout, true);

サーバの送受信

ストリームが確立されたら、後はそれぞれのストリームクラスのメソッドを使ってデータを送受信します。

出力には→PrintWriterクラスの「Println()」
入力には→BufferedReaderクラスの「readLine()」

サーバソケットの待ち行列

サーバソケットに、有るクライアントからの接続要求が有った時、既に他のクライアントと接続中であったとしても待ち行列を形成し、接続要求を受け付けられます。
つまり、同時に複数のクライアントと1個のポートでやり取りが出来るのです。

待ち行列とは、処理の要求が複数有る時、処理して貰える順番を待っている状態です。

マルチスレッド

マルチスレッドは、複数の処理を同時に行う為のプログラミングテクニックです。
サーバ側はクライアントからの接続を受信したらスレッドを生成し、後の処理(送受信)はスレッドに任せて終います。
こうする事で、メインプログラムは、直ぐに次の接続要求を待てます。
此処では、Threadクラスを拡張したクラスを作ります。

ソース ダウンロード
ServerTest.java Test03.zip
ServerTestA.java
ServerTestThread.java
ClientTest.java
ClientTestA.java

戻る