如何在 Python 中创建一个简单的聊天室2024 年 8 月 29 日 | 阅读 6 分钟 本教程将教我们如何用 Python 创建一个聊天室,并且我们将简要了解套接字编程和多线程。在深入研究这个主题之前,让我们先简要介绍一下聊天室。 什么是聊天室?聊天室是一个空间,全球多个用户可以在其中就共同的兴趣进行交流。他们可以就任何话题进行对话。它使用户能够学习新事物并分享他们的想法。我们将创建一个简单的实时聊天室,使用 Python 来更深入地理解聊天室。 什么是套接字编程?在网络术语中,套接字(socket)是通信通道中的一个端点,它是双向的,并建立服务器与一个或多个客户端之间的通信。套接字位于客户端,服务器端将其自身与服务器端上的某个端口相关联。为了让客户端与同一套接字通信,套接字必须与同一端口相关联。 套接字编程指的是连接网络上的两个节点以相互通信。服务器形成监听套接字,而客户端则连接到服务器。 什么是多线程?线程是与一组命令相关的子进程,是任何其他线程的独立部分。因此,每次用户连接到服务器时,都会为该用户创建一个单独的线程。当用户与服务器通信时,会根据套接字对象为每个客户端创建一个单独的线程。 我们需要实现两个脚本来建立聊天室。一个是持续运行的服务器,另一个是每个客户端运行以连接到服务器的客户端。 实现服务器端套接字编程服务器从客户端接收连接以建立网络接口。我们的服务器端 Python 脚本将尝试验证套接字,并将其绑定到用户指定的 IP 地址和端口。Windows 用户可能会在防火墙设置中遇到指定端口号的异常,或者可以使用一个已打开的端口。此脚本将持续运行以接受套接字连接请求,并将相应的套接字对象添加到列表中,以跟踪活动连接。每次用户想要与服务器建立连接时,都会为该用户创建一个单独的线程。在每个线程中,服务器等待一条消息,然后将该消息发送给当前在聊天室中的其他用户。当服务器在从特定线程接收消息时遇到错误,它将删除该出错的线程。 让我们开始编写服务器端代码。我们创建了一个名为 server.py 的文件。
首先,我们将导入包含实现套接字所需方法的 socket 库。sys 库附带系统模块,该模块负责提供与系统目录、函数和方法相关的数据。time 模块允许处理时间函数。
上述代码使用 socket() 函数创建套接字连接。套接字创建后,我们使用 gethostname() 函数提取主机名/本地名称。gethostname() 函数在发送 host_name 作为参数时,会检索另一个用户的 IP 地址,该地址存储在 socket_ip 中。我们将端口号设置为 8080。我们可以选择此端口,因为它在大多数机器上是默认端口。其他端口,如 3000、5000 等,通常用于 express.js。我们也可以使用端口 '555' 来运行。
bind() 函数允许我们将端口和主机绑定在一起,这在 socket 对象 new_socket 上被调用。成功绑定后,我们将打印消息“Bind Successfully”。
listen() 函数接受一个参数,即 numbers_of_connections。此参数可以是任何数字,例如 1、2、3……。
在上述代码中,conn 变量表示与套接字的连接,变量 'add' 被赋值为客户端的 IP 地址。
传入的连接请求及其详细信息存储在 client_name 变量中。客户端名称最多可以超过 1024 字节。它在服务器端被解码,并打印一条消息表明已连接。然后服务器发送主机名。
用户输入消息。它使用 encode() 函数进行编码,然后通过套接字传输。send() 函数用于发送消息。此函数在早期调用 accept() 函数期间创建的连接对象上调用。之后,它显示消息“the message has been delivered。” 使用 conn 对象的 recv() 函数接收传入消息。它可以接收 1024 字节的信息。decode() 方法在服务器端解码消息。 完整的服务器端代码现在让我们看看客户端套接字编程 聊天室客户端套接字编程现在,我们将创建一个名为 client.py 的文件,并编写代码以与聊天服务器进行通信。
我们导入了与服务器端相同的库。
与服务器端相同,使用 socket() 函数创建套接字连接。套接字创建后,我们使用 gethostname() 函数提取主机名/本地名称。gethostname() 函数在发送 host_name 作为参数时,会检索另一个用户的 IP 地址,该 IP 地址存储在 socket_ip 中。我们将端口号设置为 8080。
首先输入另一个服务器的详细信息。输入正确的 IP 地址很重要,否则通信将失败。服务器的主机名和端口以某种方式绑定在一起并连接到套接字。
recv() 函数接收数据并接受 1024 字节的数据。它存储在 message 对象中,并使用 decode() 函数进行解码。消息与服务器主机名和接收到的消息一起打印。客户端可以键入任何消息作为输入,对其进行编码,并使用套接字将其发送到服务器。 完整的客户端代码结论在本教程中,我们解释了如何使用 Python 创建一个简单的聊天室。我们讨论了聊天室的术语以及如何编写客户端和服务器端的代码。您可以复制这两个代码并在您的机器上运行它们,从而在终端上获得简单的聊天室界面。 |
在本教程中,我们将学习 Python 中用于数据工程师的流行库。这些库使数据工程师的生活变得轻松。众所周知,Python 是机器学习最流行的语言。我们将列出这些流行库及其代码。前六个...
阅读 8 分钟
什么是矩阵?编程中的矩阵也被视为多维数组。一个矩阵可以是任何维度的,例如二维矩阵、三维矩阵等。我们可以通过排列许多一维数组(一维数组的堆栈)来创建二维矩阵。在...
阅读 3 分钟
在本教程中,我们将学习如何在 Python 中将列表中的所有元素相乘。让我们看一些示例来理解我们的目标- 输入 - [2, 3, 4] 输出 - 24 我们可以观察到,在输出中,我们得到了乘积...
阅读 3 分钟
?在本教程中,我们将看到如何编写代码来打印 Python 错误层次结构。但在开始之前,我们应该首先了解异常到底是什么?异常是指即使我们的代码在语法上是正确的也可能发生的错误。这些不是...
阅读 2 分钟
?要检查给定数字是否为完全平方数,有几种方法可以使用 Python 中的各种内置函数和各种运算符。一些主要方法如下:方法 1:使用 math 模块中的 sqrt() 函数,您可以使用 sqrt()...
阅读 3 分钟
以下教程基于数据分析;我们将详细讨论方差分析(ANOVA),以及在Python编程语言中执行该过程。ANOVA通常用于心理学研究。在以下教程中,我们将理解如何……
阅读 13 分钟
在本教程中,我们将学习 Python 运算符优先级和结合性。理解 Python 运算符的机制对开发人员至关重要。读者最好在检查后理解 Python 如何评估其运算符的顺序。某些运算符优先于其他运算符;……
阅读 4 分钟
在本教程中,我们将学习并发以及如何使用并发加速 Python 程序。我们将了解并发方法与 asyncio 模块的比较。我们还将讨论什么是并行性以及一些并发方法。什么是并发?并发是...
阅读 12 分钟
尽管移动和 Web 应用程序似乎占据了软件开发市场,但对传统的图形用户界面 (GUI) 桌面应用程序仍然存在需求。对于热衷于使用 Python 编程语言创建此类应用程序的开发人员来说,有...
阅读25分钟
| 魔术命令 当 Python 于 1991 年推出时,普遍认为 Python 是“自担风险”的语言。但情况已经改变;Python 目前是一种主导语言,它用于数据科学、机器学习和软件开发。我们知道...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India