talosのプログラミング教室

はじめてのJava ~ネットワーク編~

スポンサーリンク

f:id:talosta:20200404182056p:plain


今回はJavaでネットワークプログラミングをしていきます。

Webアプリなどを作るためには必須の技術ですのでしっかり覚えましょう。

クライアント/サーバアプリケーション

ここではクライアント/サーバアプリケーションを作っていきます。

Javaではソケットによって行います。

ソケットTCP/IP通信を実現します。

それではさっそく見ていきましょう。

import java.io.*;
 // ネットワーク関係のパッケージ
import java.net.*; 

class Server {
    public static void main(String args[]) {
        //ポート番号
        final int PORT = 10000;  

        try {
            String str;
            
            // サーバソケットを作成
            ServerSocket ss = new ServerSocket(PORT);

            while(true) {
                // クライアントから要求を受ける
                Socket s = ss.accept();

                 // クライアントからの文字列を読み取る
                InputStream is = s.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));                
                str = br.readLine();

                System.out.println(str);

                 // BufferedReaderオブジェクトをクローズする
                br.close();
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}
import java.io.*;
import java.net.*;


class Client {
    public static void main(String args[]) {
        final int PORT = 10000;
        // IPアドレス(ローカルホスト)
        final String LOCALHOST = "127.0.0.1";

        try {
            Socket s = new Socket(LOCALHOST, PORT);

            // 文字列をサーバに書き込む
            OutputStream os = s.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
            bw.write(args[0]);

            // BufferedWriterオブジェクトをクローズする
            bw.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

説明の前に動かしてみましょう。

まず、コマンドプロンプトなどを開き、サーバプログラム(上のプログラム)を実行してください。

次に、もう一つコマンドプロンプトを開き、そちらでクライアントプログラム(下のプログラム)を実行します。

このとき、コマンドライン引数に好きな文字列を打ち込んでください。

サーバ側のコマンドプロンプトにその文字が出力されるはずです。

サーバプログラム解説

ポート番号1023以下はウェルノウンポートなので、ポート番号は1024以上にしましょう。

サーバソケットインスタンスは、ポート番号を引数としたコンストラクタで生成できます。

その後、無限ループの中でaccept()によってクライアントからの要求を受け続けます。

そして、バッファ付き文字ストリームでクライアントからの文字列を読み取ります。

読み取った文字列は標準出力します。

最後にBufferedReaderオブジェクトをクローズします。

クライアントプログラム解説

ポート番号サーバと同じにします。

ソケットインスタンスを生成するにはIPアドレスも必要です。

サーバも同じパソコンで立てる場合はローカルホスト127.0.0.1を指定します。

次に、バッファ付き文字ストリームで、コマンドライン引数の文字列をサーバに書き込みます。

最後にBufferedWriterオブジェクトをクローズします。

おわりに

今回はネットワークについて説明しました。

これでJavaの基礎は終わりです。

他にもJavaについての記事を書いていますので、ぜひ読んでみてください。