Python - 网络编程

2025年1月5日 | 阅读6分钟

引言

在本教程中,我们将学习 Python 网络编程。Python 在网络编程中扮演着重要角色。Python 的标准操作系统库支持网络概念,如网络、数据编码和解码,并且使用 Python 编写网络服务比使用 C++ 更容易。在这里,我们将理解 Python 网络编程的基础。Python 提供了两个级别的网络访问,它们是:

1. 低级访问

在低级访问中,您可以访问操作系统的基本套接字支持。您可以为面向连接和无连接协议使用客户端和服务器。

2. 高级访问

您可以使用 Python 库提供的高级访问来访问应用层网络协议。这些协议包括 FTP、HTTP 等。

什么是套接字?

考虑一个双向通信通道;套接字是通信通道的端点。这些套接字可以在进程内、同一台机器上的进程之间或不同机器上的进程之间通信。套接字使用不同的方法来确定客户端和服务器之间端口到端口通信的连接类型。套接字中使用的协议包括 DNS、IP 地址、电子邮件、FTP 等。

套接字词汇

套接字词汇如下:

条款术语描述
类型套接字的通信类型。
协议指定类型和类型所使用的协议。通常为零。
领域用于传输方法的协议集,如 AF_INET、PF_INET 等。
端口服务器在一或多个端口上监听客户端呼叫。端口号、服务名或固定端口号可以是字符串。
主机名检查网络接口。它可以是包含主机名、IPv6 地址或同时包含这两种地址的字符串。它可以是整数,也可以是零长度的字符串或 "" 字符串。"

套接字编程

套接字编程是一种连接网络中的两个节点以相互通信的方法。一个套接字在一个特定的 IP 端口上监听,而另一个套接字与另一个套接字建立连接。当客户端连接到服务器时,服务器会创建一个监听套接字。这是网页浏览的真正支柱。简单地说,有服务器和客户端。对于套接字编程,我们可以使用套接字模块。因此,我们需要使用以下命令导入套接字模块:

我们需要使用 Socket.socket() 方法创建套接字。

语法

套接字编程的语法如下:

这里我们给出了 Python 中套接字编程的程序代码。代码如下:

此处,

  • socket_family 是 AF_UNIX 或 AF_INET。
  • socket_type 是 SOCK_DGRAM 或 SOCK_STREAM。
  • protocol 通常被省略,其默认值为 0。

程序代码

这里我们给出了 Python 中套接字编程的程序代码。代码如下:

输出

现在我们运行上面的代码并从中查找套接字名称。输出如下:

The socket is: <socket.socket fd=624, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>

套接字模块为客户端和服务器端编程提供了许多机会。让我们详细了解每个方法。

1. 套接字服务器方法

此方法在服务器端使用。让我们在下面了解此方法的所有函数:

函数名描述
soc.bind()它将地址连接到套接字。此地址包含主机名和端口号对。
soc.accept()TCP 被动接受客户端连接,并一直阻塞直到有连接到达。
soc.listen()它启动为 TCP 监听器。

2. 套接字客户端方法

此方法在客户端使用。让我们在下面了解此方法的所有函数:

函数名描述
soc.connect()它用于初始化 TCP 服务器连接。

3. 套接字通用方法

这是 Python 中套接字模块的通用方法。让我们在下面了解此方法的所有函数:

函数名描述
soc.send()它用于发送 TCP 消息。
soc.sendto()它用于发送 UDP 消息。
soc.recv()它用于接收 TCP 消息。
soc.recvfrom()它用于接收 UDP 消息。
soc.ghostname()它用于返回主机名。
soc.close()它用于关闭所有套接字。

Python 中的服务器客户端程序

在这里,我们学习 Python 中的服务器客户端程序。首先,我们学习服务器部分:

Server (服务器版)

服务器有一个 bind() 方法,它绑定到 IP 和端口,并允许它监听来自该 IP 和端口的请求。服务器有一个 listen() 方法,它将服务器置于监听模式,允许它监听传入的连接。服务器的 accept() 和 close() 方法终止。Accept 方法启动与客户端的连接。Close 方法用于关闭与客户端的所有连接。

程序代码

这里,我们给出使用 Python 进行服务器端网络编程的程序代码。代码如下:

输出

现在我们运行上面的代码并从中查找结果。结果如下:

The Socket is created successfully
The socket is binded to 50675
The socket is listening

说明

我们创建一个套接字对象并将一个端口存储到我们的计算机上。传递一个空字符串表示服务器能够监听来自其他计算机的连接。如果我们传递 127.0.0.1,它将仅监听本地计算机。之后,我们将服务器置于监听模式。这里,10 表示如果服务器忙,将保持 10 个连接;如果套接字 11 尝试连接,连接将被拒绝。最后,我们创建一个 while 循环,它开始接受所有传入连接,并在向每个连接的套接字发送感谢消息后关闭它。

客户

现在我们需要一些服务器可以交互的东西。我们可以让这个服务器知道我们的服务器正在工作。在终端输入以下命令:

程序代码

这里,我们给出使用 Python 进行客户端网络编程的程序代码。代码如下:

输出

现在我们运行上面的代码并从中查找结果。结果如下:

The Socket is created successfully
The socket is binded to 50675
The socket is listening
Got a connection from ('127.0.0.4', 50675)
b'Thank you for connecting with the socket'

说明

我们从端口 50675(服务器运行的端口)连接到 localhost,从服务器获取数据,然后关闭所有连接。之后,我们将此文件保存为 client.py,然后在启动服务器脚本后从终端运行它。

结论

在本教程中,我们学习了 Python 中的网络编程以及如何使用 Python 编写服务器客户端程序。