python编写简易聊天室实现局域网内聊天功能

yizhihongxing

下面是详细讲解 "Python编写简易聊天室实现局域网内聊天功能" 的完整攻略。

1. 确定需求

在开始编写简易聊天室之前,首先需要明确需求,包括:

  • 局域网内聊天:聊天室应该只能在局域网内使用,不能通过互联网访问。
  • 实现简单:聊天室应该实现基本的聊天功能,同时代码实现应该尽可能简单。
  • 支持多人聊天:聊天室应该支持多人同时聊天,任何人发出的消息都应该在所有人的聊天窗口中显示。

2. 创建聊天室服务端

使用Python的socket模块创建一个简单的聊天室服务端,代码如下:

import socket

host = socket.gethostname()
port = 9999

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen()

print(f"Server listen on {host}:{port}")

while True:
    client_socket, addr = server_socket.accept()

    print(f"New connection from {addr[0]}:{addr[1]}")

在上面的代码中,我们使用socket模块创建了一个server_socket对象,并将其绑定到本地计算机的host和端口号port上。然后使用listen()方法开始监听客户端的连接请求。当客户端连接请求到达时,accept()方法将会返回一个客户端的socket对象和一个客户端的地址(IP和端口号)。

3. 创建聊天室客户端

和服务端类似,我们也可以使用Python的socket模块创建一个简单的聊天室客户端,代码如下:

import socket

host = socket.gethostname()
port = 9999
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))

while True:
    message = input("> ")
    client_socket.send(message.encode("utf-8"))

在上面的代码中,我们使用socket模块创建了一个client_socket对象,并将其连接到服务端的host和端口号port上。然后,在一个无限循环中,用户可以输入聊天信息,并通过send()方法将其发送到服务端。请注意,在这个简单的模型中,每个客户端都是一个独立的进程。

4. 实现广播机制

现在你的聊天室已经支持了单个客户端发送消息到服务端。接下来,你需要实现广播机制,以便在服务端接收到任何一个客户端的消息时,能够将此消息广播到所有连接到服务端的客户端。

修改服务端的代码如下:

import socket

host = socket.gethostname()
port = 9999

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen()

print(f"Server listen on {host}:{port}")

while True:
    client_socket, addr = server_socket.accept()

    print(f"New connection from {addr[0]}:{addr[1]}")

    while True:
        message = client_socket.recv(1024).decode("utf-8")
        if not message:
            break
        print(f"Message from {addr[0]}:{addr[1]}: {message}")
        for socket in client_sockets:
            socket.send(f"{addr[0]}:{addr[1]}: {message}".encode("utf-8"))

    client_sockets.remove(client_socket)
    client_socket.close()

在上面的代码中,我们为每个客户端的连接创建一个单独的线程。在这个线程中,我们使用一个无限循环监视客户端,等待客户端发送消息到服务端。当服务端接收到任何客户端的消息时,它将使用for循环循环遍历当前所有连接到服务端的客户端,并使用send()方法将此消息发送到每个客户端。

5. 实现多客户端连接

现在你的聊天室已经实现了广播功能。但是,目前仍然只允许一个客户端连接到服务端。要实现多个客户端连接,你需要做以下几个步骤:

  • 修改服务端代码,将客户端的socket对象存储在一个列表中。
  • 修改广播机制,使每个客户端都能接收到其他客户端发送的消息。
  • 在客户端代码中循环等待用户输入消息,并将其发送到服务端。

这些修改后的代码如下所示:

服务端代码:

import socket

host = socket.gethostname()
port = 9999

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen()

print(f"Server listen on {host}:{port}")

client_sockets = []

while True:
    client_socket, addr = server_socket.accept()

    print(f"New connection from {addr[0]}:{addr[1]}")
    client_sockets.append(client_socket)

    while True:
        message = client_socket.recv(1024).decode("utf-8")
        if not message:
            break
        print(f"Message from {addr[0]}:{addr[1]}: {message}")
        for socket in client_sockets:
            socket.send(f"{addr[0]}:{addr[1]}: {message}".encode("utf-8"))

    client_sockets.remove(client_socket)
    client_socket.close()

客户端代码:

import socket

host = socket.gethostname()
port = 9999

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))

while True:
    message = input("> ")
    client_socket.send(message.encode("utf-8"))

使用以上代码可实现局域网内简易聊天室的基本功能。

示例

以下是两个示例,展示如何使用以上代码创建简易聊天室。

示例1:使用控制台创建简易聊天室

  1. 打开命令提示符(Windows)或终端(macOS / Linux)并将路径更改为聊天室程序所在的文件夹。
  2. 启动服务端,使用以下命令:

python server.py

  1. 打开另一个终端窗口或命令提示符窗口,将其路径更改为聊天室程序所在的文件夹。
  2. 启动一个客户端,使用以下命令:

python client.py

  1. 打开第三个终端窗口或命令提示符窗口,并启动另一个客户端,使用以下命令:

python client.py

  1. 输入任何一台客户端(终端)的窗口,即可发送消息到所有的客户端。

示例2:使用 Python IDLE 创建简易聊天室

  1. 打开 Python IDLE,并创建一个新的 Python 文件。
  2. 将以下服务端代码复制并粘贴到新文件里:

```python
import socket

host = socket.gethostname()
port = 9999

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen()

print(f"Server listen on {host}:{port}")

client_sockets = []

while True:
client_socket, addr = server_socket.accept()

   print(f"New connection from {addr[0]}:{addr[1]}")
   client_sockets.append(client_socket)

   while True:
       message = client_socket.recv(1024).decode("utf-8")
       if not message:
           break
       print(f"Message from {addr[0]}:{addr[1]}: {message}")
       for socket in client_sockets:
           socket.send(f"{addr[0]}:{addr[1]}: {message}".encode("utf-8"))

   client_sockets.remove(client_socket)
   client_socket.close()

```

  1. 将以下客户端代码复制并粘贴到一个新的 Python 文件中:

```python
import socket

host = socket.gethostname()
port = 9999

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))

while True:
message = input("> ")
client_socket.send(message.encode("utf-8"))
```

  1. 在 Python IDLE 中运行服务端程序,使用菜单栏打开 File -> Open 并打开服务端文件所在的文件夹,选择服务端文件(如 server.py),并点击 Run 即可。
  2. 在 Python IDLE 中打开另一个文件,使用菜单栏打开 File -> Open 并打开客户端文件所在的文件夹,选择客户端文件(如 client.py),并点击 Run 即可。
  3. 打开第三个文件,进行步骤五,再次点击 Run 即可。
  4. 现在可以在客户端窗口中输入任何聊天消息,然后将此消息广播到所有连接到聊天室的客户端。

最后,需要注意的是,这只是一个简单的聊天室实现,必须小心处理潜在的安全问题,例如防止恶意代码通过服务端攻击其他客户端。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python编写简易聊天室实现局域网内聊天功能 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 使用Python实现火车票查询系统(带界面)

    使用Python实现火车票查询系统(带界面)攻略 1.需求分析 在开始编写代码前,我们需要对需求进行分析。在本次的火车票查询系统中,主要包含以下几个功能: 查询火车票信息 筛选火车票信息 订票 2.环境设置 在实现火车票查询系统前,我们需要对环境进行设置。通过以下步骤可以完成Python环境安装,以及Tkinter安装: 安装Python。从Python官网…

    python 2023年6月3日
    00
  • IPython库中的display函数的简介、使用方法、应用案例详细攻略

    IPython库中的display函数的简介、使用方法、应用案例详细攻略 IPython是一个交互式的Python编程环境,它提供了许多有用的工具和函数,其中一个重要的函数是display函数。display函数可以用于在IPython中显示各种类型的对象,包括文本、图像、音频和视频等。本攻略将介绍display函数的简介、使用方法和应用案例。 简介 dis…

    python 2023年5月15日
    00
  • Python3 xml.etree.ElementTree支持的XPath语法详解

    在Python3中,可以使用xml.etree.ElementTree模块解析XML文档。XPath是一种用于在XML文档中查找信息的语言,xml.etree.ElementTree模块支持XPath语法。本文将详细讲解Python3中xml.etree.ElementTree支持的XPath语法,包括两个示例。 XPath语法 XPath是一种用于在XML…

    python 2023年5月15日
    00
  • python 将字符串转换成字典dict的各种方式总结

    下面是Python将字符串转换成字典的各种方式总结以及两个示例说明。 简介 将字符串转换为字典是Python编程中的常见需求。Python提供了多种方法将字符串转换为字典,例如使用字典解析、eval函数、json模块等。在下面的攻略中,将详细介绍Python将字符串转换成字典的各种方式。 方法一:使用字典解析 字典解析是一种Python语言中的高级技巧,可以…

    python 2023年5月13日
    00
  • 命令行运行Python脚本时传入参数的三种方式详解

    下面是“命令行运行Python脚本时传入参数的三种方式详解”的攻略。 命令行传参的三种方式 Python脚本中的参数可以通过命令行进行传递,共有3种方式: 简单传参方式 使用argparse库解析参数 使用click库解析参数 接下来分别详细讲解一下这三种方式。 简单传参方式 关键词:sys.argv 这种方式非常简单,直接在命令行中传递参数,然后在Pyth…

    python 2023年5月18日
    00
  • python Polars库的使用简介

    Python Polars库使用简介 什么是Polars库 Polars是一个开源的基于Rust编写的Python数据操作库。Polars库旨在使数据操作更快、更可靠和更易于使用。它的灵感来自于Pandas,并使用了类似于Numpy和Pandas的数据模型。 安装Polars库 要安装Polars库,可以使用pip命令,如下所示: pip install p…

    python 2023年6月3日
    00
  • Python基本知识点总结

    Python基本知识点总结攻略 1. 目标与背景 Python是一门非常流行的编程语言,它功能强大,易学易用。本攻略旨在总结Python的基本知识点,帮助初学者快速上手Python编程。 2. Python基本知识点 2.1. 变量与数据类型 变量是用于存储数据的名称标识符,Python支持多种数据类型,包括整型、浮点型、字符串、布尔型等。以下代码示例演示了…

    python 2023年5月13日
    00
  • Nodejs 中文分词常用模块用法分析

    Nodejs 中文分词常用模块用法分析 一、概述 中文分词是 NLP 中的重要任务之一,Nodejs 中文分词模块则是在 Nodejs 环境下具有处理中文分词的能力的模块,常用的中文分词模块包括:nodejieba、node-segment、segment、hanlp、thulac 等。本文将主要介绍 nodejieba 和 node-segment 这两款…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部