Java:リモート接続ごしでファイルを読み書き

文:Jeff Hanson(TechRepublic)  翻訳校正:原井彰弘
2007-12-19 14:20:01
  • このエントリーをはてなブックマークに追加

TCPクライアントとサーバ

ではここで、単純な例を用いて、接続とデータストリームの対話が実際にはどうなっているのかを見てみよう。コードはリストAで示している。このプログラムでは、クライアントクラスであるTCPClientクラスを実装し、サーバクラスであるTCPServerクラスに接続している。サーバは、クライアントからデータを受け取るとそのデータをSystem.outに書き込み、確認応答をクライアントに返す。

リストA

public class TCPServer
{
    public static void main(String args[])
    {
        try
            {
                TCPServer app = new TCPServer();
            }
        catch(java.io.IOException e)
            {
                System.out.println(e.toString());
            }
    }

    public TCPServer()
        throws java.io.IOException
    {
        System.out.println("Server started...");

        java.net.Socket clientSocket = null;
        java.io.PrintStream outStream = null;
        java.io.BufferedReader reader = null;
        String line = null;
        java.net.ServerSocket serverSocket = null;
        boolean runningFlag = true;

        try {
            serverSocket = new java.net.ServerSocket(7776);
            while (runningFlag == true)
                {
                    serverSocket.setSoTimeout(20000);
                    System.out.println("Waiting for client to connect...");
                    clientSocket = serverSocket.accept();

                    System.out.println("Client connection received from: "
                                       +clientSocket.getInetAddress().getHostName());

                    reader = new java.io.BufferedReader(
                                                        new java.io.InputStreamReader(
                                                                                      clientSocket.getInputStream()));

                    outStream =
                        new java.io.PrintStream(clientSocket.getOutputStream());
                    line = reader.readLine();
                    if ((line != null) && (line.length() > 0))
                        {
                            System.out.println("Received message: " + line);
                            outStream.println("Received message: " + line);
                        }

                    runningFlag = false;
                }
        }
        catch (java.io.IOException e)
            {
                System.out.println(e);
        }

        try
            {
                if (clientSocket != null)
                    clientSocket.close();
                serverSocket.close();
            }
        catch(java.io.IOException e)
            {
            }

        System.out.println("Exiting...");
    }
}

サーバはポート7776でソケットを開き、クライアントの接続を待っている。クライアントが接続を行うと、サーバはクライアントソケットの入力ストリームと出力ストリームを開き、データの読み書きを行う。ここでは、ローカルファイルシステムへの書き込みと同様の方法で、ストリームを操作しているということに注目して欲しい。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]