socket编程1-echoclient

talk()方法,不断读取用户从控制台输入的字符串,然后发送给EchoServer,再把EchoServer返回的字符串打印到控制台。如果用户输入字符串为“bye”,就结束与EchoServer的通信,关闭socket连接。

package Chapter1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class EchoClient {
    String host = "localhost";
    int port = 8000;
    Socket socket;

    public static void main(String[] args) {
        try {
            new EchoClient().talk();
        } catch (Exception e) {
            System.out.println("访问异常");
        }
    }

    public EchoClient() {
        try {
            socket = new Socket(host, port);
            System.out.println("客户端程序开始访问");
            System.out.println("客户端talk,端口号:" + socket.getLocalPort());
        } catch (IOException e) {
            System.out.println("无法访问指定端口号 " + port);
        }
    }

    public void talk() {
            try {
                if (socket != null) {
                    System.out.println("---------------- " + "请输入传输信息: ");
                    // 通过输入流读取到键盘输入字符
                    InputStreamReader sysin = new InputStreamReader(System.in);
                    BufferedReader localReader = new BufferedReader(sysin);
                    String msg = localReader.readLine();
                    // 使用输出流到服务器端socket
                    PrintWriter pw = getWriter(socket);
                    pw.println(msg);
                    // 通过输入流读取服务器端返回的内容
                    BufferedReader br = getReader(socket);
                    // 如果服务器端返回over,就关闭socket;如果未返回over就继续talk()
                    String response=br.readLine();
                    if (response.equals("over")||response.equals("echobye")) {
                        socket.close();
                        System.out.println("接收到服务器端返回"over",客户端关闭socket");
                    } else {
                        System.out.println("得到服务器端返回: " + response);
                        talk();
                    }
                }
            } catch (IOException e) {
                System.out.println("talk方法异常");
            }
        }

    private BufferedReader getReader(Socket socket) throws IOException {
        InputStream socketIn = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(socketIn));
        return br;
    }

    private PrintWriter getWriter(Socket socket) throws IOException {
        OutputStream socketOut = socket.getOutputStream();
        PrintWriter pw = new PrintWriter(socketOut, true);
        return pw;
    }
}

原文地址:https://www.cnblogs.com/stay-sober/p/4158791.html