网络编程
-
直接通过 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));
-
客户端通过域名及端口连接到服务器
Socket echoSocket = new Socket(hostName, portNumber);
-
服务器接受连接
Socket clientSocket = serverSocket.accept();
- 原先的套接字用于与客户端连接,其远端被设置为连接的客户端的信息,服务器还会创建一个新的套接字用于继续监听新的连接
-
连接后服务器和客户端可以使用套接字继续宁数据与交互
-
但是这样性能开销很大!
selector¶
- 使用一个线程管理多个 channel 节省资源
- 允许单个线程检查多个通道上的 I/O 事件。选择器可以检查通道是否准备好进行操作,例如读取和写入。