Java 中的网络支持:

  • InetAddress:用于表示玩过上的硬件资源,即IP地址;
  • URL:统一资源定位符;
  • Sockets:使用TCP协议实现网络通信;
  • Datagram:使用UDP协议实现网络通信

网络通信:利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以通过这个标志与其他进程进行交互

Socket定义

socket:中文“套接字”,实际英文应翻译为插座,套接字翻译真的不知道是为什么;它是计算机之间通信的一种约定或者一种方式。通过socket这种约定,一台计算机可以接收或向其他计算机发送数据。
image.png
其中的传输层就是 TCP/IP 所在的地方,而你平时通过代码编写的应用程序大多属于应用层范畴,socket 在这里起到就是连接应用层与传输层的作用。

Socket的实现过程

连接过程

socket 的诞生是为了应用程序能够更方便的将数据经由传输层来传输,所以它本质上就是对 TCP/IP 的运用进行了一层封装,然后应用程序直接调用 socket API 即可进行通信。那么它是如何工作的呢?它分为 2 个部分,服务端需要建立 socket 来监听指定的地址,然后等待客户端来连接。而客户端则需要建立 socket 并与服务端的 socket 地址进行连接。
image.png

数据传输

接下来的数据传输过程就简单很多,发送数据就是客户端往服务端通信,服务端处理完之后的数据返回则相反。
传输的过程涉及到数据 Copy,不过这些 Copy 是必不可少的。其中的发送缓冲区和接收缓冲区就是套接字缓存 (socket buffer)
image.png

断开连接

image.png

总结

简单总结一下 socket。socket 是进程间数据传输的媒介,为了保证连接的可靠,你需要特别注意建立连接和关闭连接的过程。为了确保准确、完整的数据传输,客户端和服务端来回进行了多次网络通信才得以完成连接的创建和关闭,这同时也是你在运用一个连接时所花费的额外成本。
基于 socket 我们可以选择建立长连接或者短连接,在实际运用中两者都有可能被用到。