Javaベースhello/hiネットワークチャットプログラム

5031 ワード

Socket(ソケット)は、OSIモデルにおいてセッション層とトランスポート層の間に位置する特定のプロトコルとは独立したネットワークプログラミングインターフェースである.その使用方法によって、ソケットをアクティブソケットとパッシブソケットに分けることができ、パッシブソケットは、受信接続を待つソケット(例えば、サーバソケット)を指し、アクティブソケットは接続を開始するソケット(例えば、クライアントソケット)を指す.JavaベースのSocketクラスで作成されたhello/hiネットワークプログラムを以下に示します.
Clientエンドコード:
import java.net.*;
import java.io.*;

public class ChatClient {
    
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("127.0.0.1",2333);
        BufferedReader in = 
                new BufferedReader(
                    new InputStreamReader(
                        socket.getInputStream())); 
        PrintWriter out =
            new PrintWriter(
                new BufferedWriter(
                        new OutputStreamWriter(
                                socket.getOutputStream())),true);
        out.println("hello");
        System.out.println("client: hello");
        String str = in.readLine();
        System.out.println("server: "+str);
        socket.close();
    }
    
}

Serverエンドコード:
import java.net.*;
import java.io.*;

public class ChatServer {
    
    public static void main(String[] args) throws IOException{
        ServerSocket s = new ServerSocket(2333);
        Socket socket = s.accept();
        BufferedReader in = 
            new BufferedReader(
                new InputStreamReader(
                    socket.getInputStream()));
        PrintWriter out = 
            new PrintWriter(
                new BufferedWriter(
                    new OutputStreamWriter(
                        socket.getOutputStream())),true);
        while(true) {
            String str = in.readLine();
            if(str.equals("hello")) {
                out.println("hi");
                break;
            }
        }
        socket.close();
        s.close();
    }
    
}

Client側は、ローカルでテストを行うため、ipアドレスを127.0.0.1に設定し、占有されていないportを選択します.ここで2333を選択します.そしてPrintWriterによってSocketのOutputStreamに「hello」を書き込んでサーバ側に転送し、SocketのgetInputStream()メソッドによってサーバ側からの情報を受信する.サーバ側はまず1つのサーバSocketを登録し、portを2333に設定してから1つのSocketを作成し、そのaccept()メソッドを使用してClient側と接続を確立し、SocketのgetInputStream()メソッドを通じてClient側からの情報を受信し、情報を受信し、情報内容が「hello」であれば、PrintWriterを介してSocketのOutputStreamに「hi」を書き込んでClient側に送信する.Client側も同様にSocketのgetInputStream()メソッドによりサーバ側からの「hi」を受信する.最終印刷結果は次のとおりです.
  client: hello  server: hi
以上がJavaネットワークプログラミングにおけるSocketクラスの簡単な使い方であり,同時実行を実現するにはThreadを用いる必要がある.
 
参考文献:
1. Bruce Eckel, Thinking in Java (4th Edition).