Skip to content

网络编程

  • 直接通过 url 获取数据

    URL oracle = new URL("http://www.oracle.com/");
            BufferedReader in = new BufferedReader(
            new InputStreamReader(oracle.openStream()));
    

  • 建立连接进行读写

    URL oracle = new URL("http://www.oracle.com/");
    URLConnection yc = oracle.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(
        yc.getInputStream()));
    OutputStreamWriter out = new OutputStreamWriter( connection.getOutputStream());
    

NIO

  • socket:套接字是网络上运行的两个程序之间双向通信链路的一个端点。套接字绑定到端口号,以便 TCP 层可以识别数据要发送到的应用程序
  • 服务器保持等待,监听套接字以等待客户端发出连接请求。

    ServerSocket serverSocket = new ServerSocket(80));
    

  • image-20231225015934586

  • 客户端通过域名及端口连接到服务器

  • Socket echoSocket = new Socket(hostName, portNumber);
  • 服务器接受连接Socket clientSocket = serverSocket.accept();

  • 原先的套接字用于与客户端连接,其远端被设置为连接的客户端的信息,服务器还会创建一个新的套接字用于继续监听新的连接
  • image-20231225015838769

  • 连接后服务器和客户端可以使用套接字继续宁数据与交互

  • image-20231225020025833

  • 但是这样性能开销很大!

  • image-20231225020100938

selector

  • 使用一个线程管理多个 channel 节省资源
  • image-20231225014249680
  • 允许单个线程检查多个通道上的 I/O 事件。选择器可以检查通道是否准备好进行操作,例如读取和写入。
  • image-20231225020142910