• socket编程1-EchoServer


    代码解析:
     
    service()方法 不断等待客户端程序的连接请求,serversocket.accept()得到socket对象后,表示建立连接,从Socket对象中得到输入流、输出流,分别用PrintWriter 和 BufferedReader来装饰。不断的用BufferedReader对象的readLine()方法读取客户端程序发来的字符串,再调用BufferWriter对象的println()方法向客户返回字符串“返回响应”。当读取到客户端发来“bye”字符串后,结束通信,关闭连接。

    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.ServerSocket;
    import java.net.Socket;

    public class EchoServer {
        private ServerSocket server;
        private int port = 8000;
        Socket socket;

        public static void main(String[] args) throws IOException {
            /*
             * //返回本地主机ip地址 InetAddress addr=InetAddress.getLocalHost();
             * //返回代表"222.34.5.7"的IP地址 InetAddress
             * addr2=InetAddress.getByName("222.34.5.7");
             * //返回域名为"www.baidu.com"的ip地址 InetAddress
             * addr3=InetAddress.getByName("www.baidu.com");
             */
            new EchoServer().service();
        }

        /**
         * 服务器端程序一直监听端口,来接收客户端程序的连接请求。
         * 如接收到连接请求,accept()方法就返回一个Socket对象,此对象与客户端的Socket对象形成一条通信线路,建立连接
         */
        public EchoServer() throws IOException {
            server = new ServerSocket(port); // 1.创建ServerSocket对象,在构造方法中指定监听的端口
            System.out.println("服务器端程序启动,等待客户端程序访问");
            socket = server.accept(); // 2.调用ServerSocket对象的accept()方法,来监听端口,等待客户端程序的连接请求。
            System.out.println("service开始连接客户端 " + socket.getInetAddress() + ":"
                    + socket.getPort());
        }

        public void service() {

            try {
                BufferedReader br;
                br = getReader(socket);
                PrintWriter pw = getWriter(socket);
                String msg = null;
                msg = br.readLine();
                System.out.println("service接收到客户端数据:" + msg);
                if (msg != null) {
                    if (msg.equals("bye")) {
                        pw.println("over");
                        System.out.println("客户端已发送"bye",服务端返回"over",将关闭服务端socket");
                        socket.close();
                    } else {
                        pw.println("service返回响应"" + msg + """);
                    }
                } else{
                    System.out.println("service 未得到客户端数据");
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // finally {
            // if (socket != null)
            // try {
            // socket.close();
            // System.out.println("服务端socket已关闭");
            // } catch (IOException e) {
            // // TODO Auto-generated catch block
            // e.printStackTrace();
            // }
            // }
        }

        /*
         * Socket类提供了getInputStream()、getOutputStream()方法,分别返回输入流InputStream对象
         * 、输出流OutputStream对象, 向输出流写数据---向对方发送数据 从输入流读数据---接收来自对方的数据
         *
         * InputStream socketIn=socket.getInputStream(); BufferedReader br=new
         * BufferedReader(new InputStreamReader(socketIn));
         *
         * OutputStream socketOut=socket.getOutputStream();
         * //参数true表示每写一行,PrintWriter缓存就自动溢出,把数据写到目的地 PrintWriter pw=new
         * PrintWriter(socketOut,true);
         */

        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;
        }

    }

  • 相关阅读:
    css 样式 图片平铺整个界面
    div垂直居中 css div盒子上下垂直居中
    .net 日期格式转换
    一个DIV三列布局100%高度自适应的好例子(国外)
    TFS2012团队管理基本配置及基础使用方法
    转-CSS3 圆角(border-radius)
    webpack进阶用法你都get到了么?
    webpack4的配置你都掌握了么?
    初入webpack
    番外篇:一篇读懂浏览器结构
  • 原文地址:https://www.cnblogs.com/stay-sober/p/4158793.html
Copyright © 2020-2023  润新知