套接字为什么叫套接字


编程语言中,套接字被广泛运用于进程间或设备间的通信。本章将详细解析Python语言中套接字模块的正确使用方法,以实现常见的网络协议数据发送与接收。

在开始之前,请先禁用网卡自动校验和功能。

随后,你可以使用原始套接字来发送数据包。其中,UDP作为一种无连接协议,允许消息直接发送至其他进程或计算机,无需建立任何先前的连接。这意味着,一旦消息被发送,不会有自动的确认机制。UDP通常适用于那些对延迟敏感的应用程序,或是需要发送网络范围广播的应用。

以下代码示例展示了如何使用UDP协议将消息发送至本地主机端口6667上的进程。

值得注意的是,在UDP通信中,无需“关闭”套接字,因为它是无连接的协议。

UDP的无连接特性意味着发送方和接收方不需要在发送消息前建立连接。当使用socket.recvfrom方法时,它将返回一个包含接收到的消息(msg)和发送者地址(addr)的元组。

以下是使用Python套接字模块编写的简单UDP服务器示例。

还存在另一种利用socketserver.UDPServer的实现方式。

默认情况下,套接字处于阻塞模式,这意味着脚本的执行会暂停等待套接字接收数据。

套接字模块提供了对底层操作系统功能的低级访问,它能够控制计算机间或进程间的数据发送与接收。要实现互联网数据传输,通常需要结合使用多个模块。

下面这段代码演示了如何发送一个字节字符串'Hello'至本地主机端口6667上的TCP服务器,并在发送完成后关闭连接。

通常,套接字的输出是阻塞的。在connect和send调用中,程序会等待直到操作“完成”。对于connect,这表示服务器实际接受了连接;对于send,仅表示操作系统有足够的缓冲区空间来排队稍后发送的数据。

在使用完套接字后,应当总是执行关闭操作。

当程序不带任何参数运行时,它将启动一个在IP地址127.0.0.1的端口5000上的TCP套接字服务器。该服务器会在单独的线程中处理每个连接请求。

若使用-c参数运行程序,它将连接到服务器并读取客户端列表,随后将其打印出来。客户端列表将以JSON字符串的形式进行传输。通过传递不同的-n参数可以指定客户端名称,并观察客户端列表的变化效果。

client_list.py

服务器端输出示例:

[此处应展示服务器端接收并处理客户端请求的输出]

客户端端输出示例:

[此处应展示客户端发送请求及接收响应的输出]

值得注意的是,接收缓冲区的大小限制为1024字节。如果客户端列表的JSON字符串表示的数据量超过此大小限制,则可能会被截断。这种情况将触发相应的异常处理机制。