zoukankan      html  css  js  c++  java
  • 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;
        }
    }

  • 相关阅读:
    网站服务器架构设计
    使用同步或异步的方式完成 I/O 访问和操作(Windows核心编程)
    堆栈上的舞蹈之释放重引用(UAF) 漏洞原理实验分析
    内核模式下的线程同步的分析(Windows核心编程)
    用户模式下的线程同步的分析(Windows核心编程)
    Linux下部署Django项目
    HDU 2075 A|B?
    HDU 2052 Picture
    HDU 2024 C语言合法标识符
    HDU 2026 首字母变大写
  • 原文地址:https://www.cnblogs.com/stay-sober/p/4158791.html
Copyright © 2011-2022 走看看