Python 套接字刷新
在本文中,我们将看到 Python 的套接字模块如何为底层网络套接字实现提供低级接口。 我们将在 Python 的套接字模块中看到一些重要的方法。
我们还将通过一些 Python 代码来了解如何使用 Python 从服务器向客户端发送消息。 那么,让我们开始吧。
Python 套接字刷新
我们有没有想过如何在 Python 中刷新套接字? 如果是这样,我们并不孤单。
刷新套接字在网络应用程序中很常见,但大多数人需要帮助才能理解它是如何工作的。
在这篇 Python 文章中,我们将了解什么是套接字刷新及其工作原理。 我们还将讨论如何在 Python 中刷新套接字。
套接字刷新定义
当我们刷新套接字时,我们清除了它的内部缓冲区。 该缓冲区存储等待发送或接收的数据。
通常需要刷新套接字以确保发送或接收缓冲区中的所有数据。
例如,如果我们向远程服务器发送数据,我们可能希望刷新套接字以确保在连接关闭之前发送完所有数据。
Python 的 socket flush 函数用于刷新 socket 的写缓冲区。 此函数通常用于确保在关闭套接字之前发送缓冲区中的所有数据。
套接字刷新过程
当我们刷新套接字时,缓冲区中的数据会立即发送或接收。 刷新套接字的过程通常由操作系统(Windows、Mac 或 Linux)处理。
在大多数情况下,我们不需要担心套接字刷新是如何工作的细节。 但是,重要的是要了解缓冲区中的数据是立即发送或接收的,这意味着如果在发送所有数据之前关闭连接,数据可能会丢失。
在 Python 中刷新套接字
在 Python 中刷新套接字相对简单。 该过程类似于在 Python 中刷新文件。
正如我们所见,这个过程非常简单。 但是,重要的是要记住缓冲区中的数据是立即发送的,因此我们必须小心确保在连接关闭之前发送所有数据。
在Python中实现socket编程,必须引入socket模块或框架。 该模块包含创建套接字和帮助它们相互关联所需的内置方法。
socket模块的重要方法:
- socket.socket():用于创建套接字(服务器端和客户端都需要创建套接字)。
- socket.accept():用于接受一个连接。 它返回一对值 (conn, address)。
- socket.bind():用于绑定到作为参数指定的地址。
- socket.close():用于绑定到指定为参数的地址。
- socket.connect():将套接字标记为已关闭。
- socket.listen():用于连接指定为参数的远程地址。
服务器
现在我们将创建一个文件并为其命名。 在我们的例子中,我们将文件命名为 SERVER1.py。
现在我们将开始为服务器编写代码。
所以首先,我们将导入套接字库。 然后我们将使用 socket.socket() 方法创建一个套接字并将其分配给 sock。
在括号内,我们将使用 socket.AF_INET 将地址族指定为 AF_INET。 请注意,AF_INET 指的是来自互联网的地址。
它需要一对主机和一个端口号。 主机可以使用某个特定网站的 URL 或其地址或端口号作为整数。
我们将指定的第二个参数是 socket.SOCK_STREAM。 SOCK_STREAM 用于创建 TCP 协议。
接下来我们要做的是编写绑定函数。 bind 方法接受两个参数作为一个元组,因此合起来就是一个参数。
它与主机和端口号一致。 作为参数,我们将使用 socket.gethostname()
,1024。
我们使用 bind 方法是因为我们希望服务器绑定到客户端。
现在我们将使用 listen 方法并传递任何数字。 在我们的例子中,我们已经通过了 5。
现在我们将使用一个循环,以便当连接为真时,我们希望服务器接受客户端套接字及其地址。 我们将为此使用 accept 方法。
一旦我们收到客户端套接字及其地址,我们将打印它。 我们将使用 print 方法,在 print 方法中,我们将使用 f 字符串。
f 字符串是一个文字字符串,以 f 为前缀,并在括号内包含 Python 表达式。 在 print 语句中,我们将给出一条消息 Connection to {adr} established..
因此,一旦建立连接,我们就想将一些消息从服务器传递给客户端。 为此,我们将使用 c.send。
因为我们需要一个字节,所以我们将指定它。 在此,我们将写下我们的信息。
在我们的例子中,我们的消息是 Python 中的套接字编程。 因为我们用到了bytes,所以一定要写什么样的byte。
在我们的例子中,我们将编写 utf-8。 我们的服务器现在准备好了。
示例代码:
import socket
#We imported the socket library
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((socket.gethostname(), 1024))
sock.listen(5)
while True:
clt, adr=sock.accept()
print(f"Connection to {adr} established.")
clt.send(bytes("Socket programming in Python", 'utf-8'))
我们会注意到光标在命令提示符下闪烁。 现在我们将转到客户端。
客户端
因此,我们将在同一目录中打开一个新文件并为其命名。
在我们的例子中,我们将文件命名为 CLIENT1.py。 我们要做的第一件事是导入套接字库。
现在我们将使用 socket 方法为客户端创建一个套接字。 与我们为服务器创建的方式相同。
现在,我们希望我们的客户端连接到服务器。 因此,我们将使用 connect 方法并将参数指定为 gethostname 以及我们在服务器中使用的相同端口号。 所以它是 1024。
现在我们必须将消息保存在一个变量中。 在我们的例子中,我们将其命名为 msg。
我们将使用 recv 方法来接收消息。 对于这个 recv 方法,我们可以指定任意数量的字节作为参数。
该参数将在服务器和客户端之间的一次通信中接收。 因此,在我们的第一种情况下,我们将使用 1024。
在此之后,我们将打印我们收到的号码。 因为正在传输的消息是经过编码的,所以我们必须使用 utf-8 字节对其进行解码。
示例代码:
import socket
#We imported the socket library
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((socket.gethostname(), 1024))
msg = sock.recv(1024)
print(msg.decode('utf-8'))
我们的服务器和客户端文件已准备好执行。
我们将在同一文件夹中打开命令提示符来执行这些文件,并首先将服务器的路径写为 py Filename.py。 所以在我们的例子中,我们将把它写成 py SERVER1.py 然后按 Enter。
我们会看到光标在那里闪烁。
然后我们将打开另一个命令提示符来执行第二个文件作为 py Filename.py。 在我们的例子中,我们将把它写成 py CLIENT1.py 并按 Enter 键。
输出:
一旦我们运行这两个文件,我们将收到消息 Socket programming in Python。
使用网络应用程序时,刷新套接字是一项常见任务。 这个过程相对简单,但重要的是要记住缓冲区数据是立即发送的。
使用网络应用程序时,了解套接字刷新的工作原理很重要。 通过一些练习,我们可以轻松地在 Python 中刷新套接字。
我们希望您发现这篇 Python 文章有助于理解如何使用 Python 套接字刷新。
相关文章
Python 套接字 Accept 超时
发布时间:2023/06/01 浏览次数:138 分类:Python
-
本文讨论了 Python 中套接字的超时功能,该功能对于缓解无限期等待套接字接受的问题是必要的。套接字接受、拒绝和超时。Socket Accept:当socket打开成功,此时服务端和客户端已经建立连接,可
在 Python 中使用 OpenCV 的 imshow() 函数
发布时间:2023/06/01 浏览次数:80 分类:Python
-
本篇文章将介绍如何使用该库的 imshow() 函数。在 Python 中使用 OpenCV 库中的 imshow() 函数 cv2.imshow() 函数可以在新窗口中显示图像。 创建的窗口将自动调整以适合图像。
Python 中的 OpenCV-contrib 模块
发布时间:2023/06/01 浏览次数:192 分类:Python
-
Python 提供了一个名为 OpenCV 的标准库。 它有很多工具和功能来处理和实现不同的技术和算法。这个 OpenCV 库中有一个名为 OpenCV-contrib 的附加项。 我们将在本教程中讨论这个 OpenCV-contrib 模块及其
Python 中 OpenCV 阈值
发布时间:2023/06/01 浏览次数:199 分类:Python
-
本篇文章将解决在 Python 中使用 cv2.threshold() 函数的问题。阈值技术 阈值处理是一种对黑白图像进行的图像处理技术,可用于去除噪声和过滤具有极值的像素。
Python 中的 OpenCV Canny
发布时间:2023/06/01 浏览次数:184 分类:Python
-
本篇文章将介绍 Python 中的 cv2.canny() 函数。在 Python 中使用 cv2.canny() 函数 cv2.canny() 函数实现了由 John F. Canny 开发的 Canny 边缘检测算法。
在 Python 中使用 OpenCV 筛选
发布时间:2023/06/01 浏览次数:54 分类:Python
-
本教程将演示如何使用 OpenCV 实现 SIFT 算法并将其用于 Python 中的特征匹配。 我们还将学习在 Python 中使用 OpenCV 使用 SIFT 算法来匹配两个图像。
OpenCV ArUco 标记
发布时间:2023/06/01 浏览次数:110 分类:Python
-
本篇文章将介绍使用 OpenCV 的 cv2.aruco.detectMarkers() 函数检测 ArUco 标记。使用 OpenCV 检测 ArUco 标记
OpenCV 包配置
发布时间:2023/06/01 浏览次数:159 分类:Python
-
OpenCV 是一个机器学习库,提供与计算机视觉应用程序相关的各种功能。 OpenCV 可以与 C++、Python、Java 和 MATLAB 一起使用。下面我们将列出安装和运行 OpenCV 时的一些常见问题以及如何解决这些问
使用 OpenCV 在图像上使用 Bitwise_AND
发布时间:2023/06/01 浏览次数:199 分类:Python
-
按位运算符通常用于对使用单个位操作的位或二进制数的模式执行按位运算。 OpenCV 使用相同的概念来处理和提取图像中的信息。在本文中,我们将具体了解如何使用 Python OpenCV 库来使用 Bitwi