计算机网络复习(自顶向下):第二章 应用层

参考文章

DNS

DNS为什么不采用单点的集中式的设计方式,而是使用分布式集群的工作方式?
DNS的一种简单的设计模式就是在因特网上只使用一个DNS服务器,该服务器包含所有的映射,在这种集中式的设计中,客户机直接将所有查询请求发往单一的DNS服务器,同时该DNS服务器直接对所有查询客户机做出响应,尽管这种设计方式非常诱人,但他不适用当前的互联网,因为当今的因特网有着数量巨大并且在持续增长的主机,这种集中式设计会有单点故障(嗝屁一个,全球着急),通信容量(上亿台主机发送的查询DNS报文请求,包括但不限于所有的HTTP请求,电子邮件报文服务器,TCP长连接服务),远距离的时间延迟(澳大利亚到纽约的举例),维护开销大(因为所有的主机名-ip映射都要在一个服务站点更新)等问题

DNS原理及其解析过程(仅学习)

DNS负载均衡的原理

利用dns解析来实现网站的负载均衡

DNS如何实现全局负载均衡?

tcp socket通信过程

在这里插入图片描述

tcp socket编程 java:

目的:接收客户端传来的字节流,转化成字符流,再转化成大写,传回客户端 ,客户端把大写的打印出来
Client端代码


public class Client {
    public static void main(String[] args) {
        //1.建立socket --> 指定要连接的server端口
        try {
            Socket clientSocket = new Socket("127.0.0.1", 9999);
            //读取键盘输入的字节流
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            // 2. 从Socket中获取I/0流; outputstream(为了向server发数据)   ,, inputstream(接收server端数据)
            OutputStream outputStream = clientSocket.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
            while (true) {
                String line = br.readLine();//从键盘不断输入的字符串
                bw.write(line);
                bw.newLine();//换行,标志着一段字符输入完毕,服务端readLine才会确认输入完毕
                bw.flush();
                if (line.equals("over")) {
                    break;
                }
                //读取从服务端传来的字符
                //读取服务端发来的
                BufferedReader reader=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                System.out.println(reader.readLine());
            }
            //释放资源
             br.close();
            bw.close();
            clientSocket.close();
            // 3.关闭连接
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Server端代码


public class Server {
    public static void main(String[] args) {
        //1.开启serversocket 设定端口号给予客户端连接
        try {
            ServerSocket serverSocket = new ServerSocket(9999);
            //2.阻塞等待client端 accept
            Socket acceptSocket = serverSocket.accept();
            System.out.println(acceptSocket.getInetAddress().getHostAddress() + " has connected");//表示某台网络设备与服务器连接成功
            // 3.获取io流 inputstream(接收client端数据) ,,如果要向client发数据 可以创建outputstream()
            InputStream inputStream = acceptSocket.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            PrintWriter pw = new PrintWriter(acceptSocket.getOutputStream(), true); //自动刷新缓冲区
            //把客户端传过来的字节流转换成字符流
            String line = null;
            while (null != (line = bufferedReader.readLine())) {
                if (line.equals("over")) {
                    break;
                }
                System.out.println(line);
                pw.println("服务端大写之后发来的是" + line.toUpperCase());

            }
            // 4.关闭连接
            pw.close();
            bufferedReader.close();
            acceptSocket.close();
            System.out.println(acceptSocket.getInetAddress().getHostAddress() + "has disconnected");//表示某台网络设备与服务器连接断开

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

TCP/UDP协议的Socket编程(Java语言)

Socket编程入门(基于Java实现)

思维导图

发布了92 篇原创文章 · 获赞 21 · 访问量 5073

猜你喜欢

转载自blog.csdn.net/c22cxz/article/details/105281350
今日推荐