Newer
Older
NWP / src / j2 / EchoServer.java
package j2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {
	public static void main(String args[]) {
		if (args.length < 2) {
			args = new String[2];
			args[0] = "127.0.0.1";
			args[1] = "9999"; // ポート9999番を開く
		}
		new EchoServer(args[0], args[1]);
	}

	public EchoServer(String bindaddress, String strport) {
		// ソケットや入出力用のストリームの宣言
		ServerSocket echoServer = null;
		Socket clientSocket = null;
		String line;
		BufferedReader br;
		PrintStream os;

		int port = Integer.parseInt(strport);
		try {
			echoServer = new ServerSocket();
			// クライアントからの要求を受けるソケットを開く
			echoServer.bind(new InetSocketAddress(bindaddress, port)); // サーバソケットにバインドする=ポートでの待ち受け開始
		} catch (IOException e) {
			System.err.println(e);
			System.err.println("バインド失敗。ポート番号 " + port + " (Bind-address: " + bindaddress + " 向け) がすでにつかわれているようです");
			System.err.println("ポート番号またはバインドアドレスを変更してください。");
			System.err.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。");
			System.exit(1);
		}
		System.out.println("EchoServer [" + bindaddress + ":" + port + "] started.");
		System.out.println("停止するには CTRL+C をおしてください");

		// サーバ側の処理の繰り返し
		while (true) {
			try {
				clientSocket = echoServer.accept(); // 接続がくるまで、ここで待つ
				System.out.println("accept");
				br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
				os = new PrintStream(clientSocket.getOutputStream());
				// クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す
				while ((line = br.readLine()) != null) {
					System.out.println("(Server received) " + line);
					os.println(line);
				}
			} catch (IOException e) {
				System.out.println(e);
			} finally {
				System.out.println("disconnected " + clientSocket.toString());
			}
		}
	}
}