Java疯狂讲义读书笔记第十七章

版权声明:随意转载 https://blog.csdn.net/bigcupwater/article/details/78328291
  1. 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连形成一个规模大功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。
  2. 通信协议:计算机实现通信必须有一些约定,这些约定被称为通信协议。通信协议负责对传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定处理标准。
  3. 通信协议的组成:语义部分:用于决定双方对话的类型;语法部分:决定双方对话的格式;变换规则:用于决定双方的应答关系。
  4. ISO(国际标准化组织)于1978年提出“开放系统互连参考模型”OSI。把计算机网络分为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层七层结构。
  5. IP协议,通信协议的一种提供网间连接的完善功能,包括IP数据报规定互联网络范围内的地址格式。TCP协议,传输控制协议,规定一种可靠的数据信息传递服务。两个协议可分开单独使用,但在功能上是互补的。所以经常称 TCP/IP 协议。根据TCP/IP 协议,网络分四层:应用层、传输层、网络层、物理+数据链路层。
  6. IP地址,用于唯一标识网络中的一个通信实体,这个通信实体即可以是一台主机,也可以是一台打印机或者是路由器的某一个端口。
  7. IP地址用于标识网络上的一个通信实体,但一个通信实体可以有多个通信程序同时提供网络服务,此时还需要使用端口。端口是一个16位的整数,用于表示数据交给哪个通信程序处理。
  8. Java 提供了 InetAddress 类来代表 IP 地址,使用 URLDecoder 和 URLEncoder 处理字符串转换为 application/x-www-form-urlencoded MIME 格式。
  9. URL(Uniform Resource Locator) 对象代表统一资源定位器,它是指向互联网资源的指针。资源可以是简单的文件或目录,也可以是更为复杂对象的引用。通常情况下,URL 可以由协议名、主机、端口和资源组成,如 http:// tieba.baidu.com / index.html。
  10. Java 提供了一个 URI(注意是I) 类,其实例代表一个统一资源标识符,Java 的 URI 不能用于定位任何资源,它的唯一作用就是解析。URL 则包含一个可打开到达该资源的输入流。
  11. TCP/IP 通信协议是一种可靠的协议,它在通信的两端各建立一个 Socket,从而在通信的两段之间形成网络虚拟链路。 一旦建立了虚拟的网络链路,两段的程序就可以通过虚拟链路进行通信。java 对基于 TCP 协议的网络通信提供了良好的封装,Java 使用 Socket 对象来代表两端的通信端口,并通过 Socket 产生 IO 流来进行网络通信。
  12. 在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接受来自其他通信实体的连接请求。Java 能接受其他通信实体连接请求的类是 ServerSocket,ServerSocket 对象用于监听来自客户端的 Socket 连接,如果没有连接,它将一直处于等待状态。
  13. ServerSocket 类主要方法:

        Socket accept(); // 如果接受到一个客户端Socket的连接请求,该方法将会返回一个与客户端Socket对应的Socket。
        ServerSocket(int port) // 用指定端口 port 来创建一个 ServerSocket ,0-65535
        // ServerSocket 使用完毕后应使用其 close方法关闭该 ServerSocket ,通常情况下,服务器不应该只接受一个客户端请求,所以 java 程序通常会通过循环不停调用和 accept() 方法。
    
  14. Socket 类用于 Socket 链接,客户端使用构造方法来连接到指定的服务器。
  15. Socket 类主要方法:

        Socket(InetAddress/String remoteAddress, int port); 
        // 创建连接到指定远程主机,远程端口的 Socket,
        // 该构造器没有指定本地地址、本地端口,默认使用本地主机的默认 IP 地址,默认使用系统动态分配的端口。
        Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort); 
        // 创建连接到指定远程主机、远程端口的 Socket, 
        //并指定本地 IP 地址和本地端口,使用与本地主机有多个 IP 地址的情况。
        InputStream getInputStream(); 
        // 返回该 Socket 对象对应的输入流,让程序通过该输入流从Socket中取出数据。
        OutputStream getOutputStream();
        // 返回该 Socket 对象对应的输出流,让程序通过该输出流向Socket中输出数据。
    
  16. 连接实例:
// 服务端。先运行服务端,再运行客户端
public class Server {
    public static void main(String[] args) throws IOException {
        // 在端口 30000 创建一个 ServerSocket ,用于监听客户端Socket的连接请求
        ServerSocket ss = new ServerSocket(30000);
        // 不停循环接受客户端请求
        while (true) {
            // 接受到后服务器产生一个 Socket
            Socket s = ss.accept();
            PrintStream ps = new PrintStream(s.getOutputStream());
            ps.print("我是服务器的新年祝福");
            ps.close();
            s.close();
        }
    }
}

// 客户端
public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException {
        // 客户端建立 Socket
        Socket socket = new Socket("127.0.0.1", 30000);
        BufferedReader br = new BufferedReader(
            new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        System.out.println("来自服务器的数据 : " + line);
        br.close();
        socket.close();
    }
}

猜你喜欢

转载自blog.csdn.net/bigcupwater/article/details/78328291
今日推荐