sykwer / cli_chat

On-job training of group programming. Lesson in University of Tokyo.
3 stars 0 forks source link

Client Specification #2

Open hiramekun opened 6 years ago

hiramekun commented 6 years ago

以下は #1 からのコピペ

機能実装(クライアント)

hiramekun commented 6 years ago

https://codezine.jp/article/detail/193

クラス設計

今回、クライアントは一つしか使わないので、基本的にシングルトンで実装します。 シングルトンとは、インスタンスを一つしか作らない実装方針のことです。 このサイトを見ると、シングルトンってなに?ってことがわかりやすいかと思います。 http://www.techscore.com/tech/DesignPattern/Singleton.html/

Socketを用いて、クライアントとサーバーは通信を行います。 image

◎ChatClient

○役割

◎ChatSender

○役割

サーバー側にメッセージを送信する。

todo

hiramekun commented 6 years ago

諸概念

とってもわかりやすい諸概念の簡単な説明 http://www.acroquest.co.jp/webworkshop/JavaNetwork/NP_lecture01.html http://www.acroquest.co.jp/webworkshop/JavaNetwork/NP_lecture02.html

Input/Outputのクラス説明

http://www.mlab.im.dendai.ac.jp/~yamada/java/stream/

hiramekun commented 6 years ago

送るクラス

import java.io.IOException;
import java.net.Socket;

class ChatSender {
    private static ChatSender singleton = new ChatSender();

    private ChatSender() {
    }

    static ChatSender getSender() {
        return singleton;
    }

    // TODO: 2018/05/13 実装 
    void sendMessage(Socket socket, String message) throws IOException {
    }
}

参考になりそうなコード

//送信するメッセージは以下の行に記述されているもの。
String message = "チャット接続送信テスト。";
PrintWriter writer = new PrintWriter(socket.getOutputStream());
System.out.println("送信メッセージ: " + message);
writer.println(message);
writer.close();

受け取るクラス

import java.io.IOException;
import java.net.Socket;

class ChatReceiver {
    private static ChatReceiver singleton = new ChatReceiver();

    private ChatReceiver() {
    }

    static ChatReceiver getReceiver() {
        return singleton;
    }

    // TODO: 2018/05/13 実装 
    void waiteForMessage(Socket socket) throws IOException {
    }
}

参考になりそうなコード

InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
while (!socket.isClosed()) {
     String line = reader.readLine();
     System.out.println(line);
}
hiramekun commented 6 years ago

https://stackoverflow.com/questions/484925/does-closing-the-bufferedreader-printwriter-close-the-socket-connection

Yes, closing any Writer/Reader will close all other Writers and Readers that they wrap. Don't close it until you are ready to close the underlying socket.