这篇文章内容来源自GPT,再加上我自己的一些理解。太专业的我也看不懂。
先看下GPT给套接字的解释
套接字(Socket)是在网络通信中使用的一种编程接口或抽象概念,它提供了一种通信机制,使得不同计算机之间可以进行数据交换和通信。套接字是网络通信的基础,它允许应用程序在网络上进行数据传输,实现客户端与服务器之间的通信。
套接字通常用于实现网络中的进程间通信(IPC,Inter-Process Communication),它可以在同一台计算机的进程间通信,也可以在不同计算机之间的进程间通信。
套接字编程接口提供了一组函数或方法,允许开发者创建、连接、发送和接收数据等操作。常见的套接字编程接口有 Berkeley 套接字(BSD Socket)接口和 Windows 套接字接口等。
这上面叽里呱啦一堆,倒是有几个关键字(接口、方法)。那这个可不可以当成一个类?先不管是不是真的是类,先这么理解一下。去查一下它的组成部分。
地址族(Address Family):地址族指定了套接字使用的地址格式和协议族,常见的地址族包括 IPv4、IPv6 等。不同的地址族使用不同的地址格式和协议族,例如 IPv4 使用 32 位的地址格式,而 IPv6 使用 128 位的地址格式。
套接字类型(Socket Type):套接字类型定义了套接字的通信方式和行为特性,常见的套接字类型包括流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。流套接字提供面向连接的、可靠的、基于字节流的通信,通常使用 TCP 协议;而数据报套接字提供无连接的、不可靠的、基于数据报的通信,通常使用 UDP 协议。
协议(Protocol):协议指定了套接字使用的传输协议,常见的传输协议包括 TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)等。不同的传输协议具有不同的特性和适用场景,开发者根据实际需求选择合适的协议。
地址(Address):地址用于标识套接字的网络位置,包括 IP 地址和端口号。IP 地址用于标识网络中的主机,端口号用于标识主机上的应用程序。在 IPv4 中,IP 地址通常由 4 个 8 位的数字组成,例如 192.168.1.1;在 IPv6 中,IP 地址通常由 8 组 16 位的数字组成,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。
套接字选项(Socket Options):套接字选项用于设置和获取套接字的属性和参数,包括超时时间、缓冲区大小、重用地址等。开发者可以通过套接字选项来配置套接字的行为特性,以满足实际需求。
我们把这些理解为它的属性。我这么理解只是为了对它有个具象化的概念。我再来查查它有什么方法
构造方法:
Socket(String host, int port)
: 创建一个套接字并连接到指定的主机和端口。ServerSocket(int port)
: 创建一个服务器套接字并绑定到指定的端口。连接和关闭:
connect(SocketAddress endpoint)
: 将套接字连接到指定的远程地址。close()
: 关闭套接字连接。发送和接收数据:
InputStream getInputStream()
: 获取套接字的输入流,用于接收数据。OutputStream getOutputStream()
: 获取套接字的输出流,用于发送数据。void send(byte[] data)
: 发送字节数组数据。int receive(byte[] buffer)
: 接收数据并存储到指定的字节数组缓冲区中。其他方法:
getInetAddress()
: 获取远程主机的地址。getPort()
: 获取远程主机的端口号。setSoTimeout(int timeout)
: 设置套接字的超时时间
OK,有方法,那我就认为这是个类。最后聊聊它的作用。我就不贴上GPT那一大堆专业解释了。我个人认为套接字就是传输协议(TCP/UDP等)的具体实现。只是我被这个名字迷惑了,我一直是认为它是一个唯一的编码。
我说的可能有误解,因为主观想法很多,大家当作一个初步的理解,谢谢大家。