Newer
Older
20a5080NWP / src / j2 / ThreadEchoClient.java
@Motoki Miura Motoki Miura on 22 Sep 2020 2 KB first commit for NWP exp
package j2;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
public class ThreadEchoClient implements Runnable {
    BufferedReader isbr = null;
    Thread thread = null;
    public ThreadEchoClient(Socket socket) {
	try {
	    isbr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	} catch (IOException e) {
	    e.printStackTrace();
	}
	thread = new Thread(this);
	thread.start();
    }
	
    @Override
    public void run() {
	// サーバーからのメッセージを受け取り画面に表示します
	String line;
	try {
	    while ((line = isbr.readLine()) != null) {
		System.out.println("Server: " + line);
		if (line.equals("quit")) break;
	    }
	} catch (IOException e) {
	    e.printStackTrace();
	} finally {
	    System.exit(0);
	}
    }

    public static void main(String[] args) {
	// ソケットや入出力用のストリームの宣言
	Socket socket = null;
	DataOutputStream dos = null;
	BufferedReader stdinbr = null;

	// ポート9999番を開く
	String host = "localhost";
	try {
	    socket = new Socket(host, 9999);
	    dos = new DataOutputStream(socket.getOutputStream());
	    stdinbr = new BufferedReader(new InputStreamReader(System.in));
	} catch (UnknownHostException e) {
	    System.err.println("Don't know about host: "+host);
	} catch (IOException e) {
	    System.err.println("Couldn't get I/O for the connection to: "+host);
	}

	// サーバーにメッセージを送る
	if (socket != null && dos != null ) {
	    new ThreadEchoClient(socket);
	    try {
		// メッセージを送ります
		dos.writeBytes("HELLO\n");
		dos.writeBytes("type quit to disconnect\n");

		// 標準入力(キーボード)からのメッセージを送信します
		while (true) {
		    String s = stdinbr.readLine();
		    dos.writeBytes(s+"\n");
		}

	    } catch (UnknownHostException e) {
		System.err.println("Trying to connect to unknown host: " + e);
	    } catch (IOException e) {
		System.err.println("IOException: " + e);
	    }
	}
    }
}