zoukankan      html  css  js  c++  java
  • (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)
    1.1 编程模型
    服务器:
    (1)创建ServerSocket类型的对象,并提供端口号;
    (2)等待客户端的连接请求,调用accept()方法;
    (3)使用输入输出流进行通信;
    (4)关闭Socket并释放有关的资源;

    客户端:
    (1)创建Socket类型的对象,并提供服务器的IP地址和端口号;
    (2)使用输入输出流进行通信;
    (3)关闭Socket并释放有关的资源;

    1.2 相关类和方法的解析
    (1)ServerSocket类
    java.net.ServerSocket类主要用于描述服务器的套接字(大插排)。
    ServerSocket(int port) - 根据参数指定的端口号来构造对象。
    Socket accept() - 侦听并接受到此套接字的连接请求。
    void close() - 关闭套接字。

    (2)Socket类
    java.net.Socket类用于描述客户端的套接字,该套接字是两台机器间通信的端点。
    Socket(String host, int port) - 根据参数指定的主机名和端口号来构造对象。
    InputStream getInputStream() - 用于获取当前Socket的输入流。
    OutputStream getOutputStream() - 用于获取当前Socket的输出流。
    void close()

    练习:
    编写TestServerString类,使用BufferedReader类读取字符串内容并打印出来;
    编写TestClientString类,使用PrintStream类发送字符串"hello"给服务器;
    要求实现服务器接受到客户端的消息后,向客户端回发消息"I receive!";
    要求实现客户端发送给服务器的数据内容由用户从键盘输入;
    要求实现客户端和服务器可以不断地进行通信,直到客户端发送"bye"后通信结束;
    要求服务器可以不断地响应客户端的连接请求,采用多线程技术实现;
    扩展作业:
    要求实现每当服务器接受到客户端发来的消息后,就将该消息发送给当前在线所有客户端
    要求采用多线程分别处理消息的发送和接收;
    要求实现聊天记录的生成;
    要求实现文件的传输;
    要求实现单聊和群聊的功能选择;

    2.tcp协议和udp协议的比较(笔试题)
    2.1 tcp协议
    tcp协议 - 传输控制协议,是一种面向连接的协议,类似于打电话。
    - 建立连接 => 进行通信 => 断开连接
    - 在通信的整个过程中全程保持连接
    - 保证了数据传递的可靠性和有序性
    - 是一种全双工的字节流通信方式
    - 服务器压力比较大,资源消耗比较多,并且发送数据的效率相对比较低

    2.2 udp协议
    udp协议 - 用户数据报协议,是一种非面向连接的协议,类似于写信。
    - 在通信的整个过程中不保持连接
    - 不保证数据传递的可靠性和有序性
    - 是一种全双工的数据报通信方式
    - 服务器压力比较小,资源消耗比较少,并且发送数据的效率相对比较高

    3.基于udp协议的编程模型(重点)
    3.1 编程模型
    主机A(接收方):
    (1)创建DatagramSocket类型的对象,并提供端口号;
    (2)创建DatagramPacket类型的对象,用于接收发来的数据;
    (3)从Socket中接收数据,调用receive()方法;
    (4)关闭Socket并释放有关的资源;

    主机B(发送方)
    (1)创建DatagramSocket类型的对象;
    (2)创建DatagramPacket类型的对象,并提供接收方的IP地址和端口号;
    (3)通过Socket发送数据,调用send()方法;
    (4)关闭Socket并释放有关的资源;

    3.2 相关类和方法的解析
    (1)DatagramSocket类
    java.net.DatagramSocket类用于描述发送或接受数据报的套接字(邮局点);
    DatagramSocket() - 无参的方式构造对象。
    DatagramSocket(int port) - 根据参数指定的端口号来构造对象。
    void receive(DatagramPacket p) - 用于接收数据并存放到参数指定的变量中。
    void send(DatagramPacket p) - 用于将参数指定的数据发送出去。
    void close()

    (2)DatagramPacket类
    java.net.DatagramPacket类用于描述数据报信息(信件);
    DatagramPacket(byte[] buf, int length) - 用于接收数据包并记录到参数变量中;
    DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    - 用于将参数指定的数据发送到参数指定的位置
    InetAddress getAddress() - 用于获取发送方或接收方的通信地址信息。
    int getPort() - 用于获取发送方或接收方的端口信息。
    int getLength() - 用于获取发送或接收数据的长度。

    (3)InetAddress类
    java.net.InetAddress类用于描述互联网协议地址。
    static InetAddress getLocalHost() - 用于获取本地主机的通信地址信息。
    static InetAddress getByName(String host) - 根据参数指定的主机名来获取通信地址。
    String getHostName() - 用于获取通信地址中的主机名信息。
    String getHostAddress() - 用于获取通信地址中的IP地址信息。

    不忘初心,方得始终! 坚持!坚持!坚持!!
  • 相关阅读:
    tricky c++ new(this)
    MCI使用
    LoadIcon的使用
    深入浅出Node.js (2)
    洛谷 P1464 Function
    洛谷 P1722 矩阵 II
    洛谷 P1036 选数
    洛谷 P1303 A*B Problem
    洛谷 P2694 接金币
    洛谷 P1679 神奇的四次方数
  • 原文地址:https://www.cnblogs.com/sumboy/p/9058616.html
Copyright © 2011-2022 走看看