Python socket C/S结构的聊天室应用实现

Python socket C/S结构的聊天室应用实现,可以分为以下几个步骤:

  1. 导入socket模块。

在Python编写socket网络程序时,需要使用socket库,因此需要在代码文件顶部导入socket模块。

import socket
  1. 创建服务器端。

服务器端需要调用socket()方法创建一个socket对象,并指定地址和端口号,接着使用bind()方法绑定地址和端口号。如果仅仅完成这些操作,服务器依然无法正常工作,必须调用listen()方法使其进入被动监听状态,等待客户端的请求。如果有客户端发送请求,则通过accept()方法接收客户端的连接,并返回一个代表该连接的socket对象。

可以参考以下代码:

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(5)
while True:
    conn, addr = server_socket.accept()
  1. 创建客户端。

客户端需要调用socket()方法创建一个socket对象,接着使用connect()方法连接服务器。客户端连接服务器后,就可以向服务器发送数据,也可以接收服务器的返回结果。

可以参考以下代码:

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))
while True:
    message = input('请输入要发送的消息:')
    client_socket.send(message.encode())
    data = client_socket.recv(1024)
    print('接收到服务器的返回消息为:', data.decode())
  1. 实现聊天室功能。

在服务器端,可以使用一个列表来存储所有已连接的客户端socket对象,每当一个客户端连接上来后,就将该客户端的socket对象添加到列表中。接着,可以使用多线程的方式来处理每个客户端的请求,在每个线程中利用send()方法将消息发给其他客户端。

在客户端可以使用input()方法从控制台获取用户输入,然后使用客户端的send()方法将消息发送给服务器。

可以参考以下代码:

服务器端代码:

import threading
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(5)

client_list = []

def handle_client(client_socket, client_address):
    while True:
        data = client_socket.recv(1024)
        message = data.decode()
        if message == 'exit':
            client_socket.close()
            client_list.remove(client_socket)
            print('客户端', client_address, '已经下线')
            break
        else:
            print('接收到来自客户端', client_address, '的消息:', message)
            for c in client_list:
                if c != client_socket:
                    try:
                        c.send(data)
                    except:
                        pass

while True:
    client_socket, client_address = server_socket.accept()
    client_list.append(client_socket)
    thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
    thread.start()

客户端代码:

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))

while True:
    message = input('请输入要发送的消息:')
    client_socket.send(message.encode())
    if message == 'exit':
        client_socket.close()
        break
    data = client_socket.recv(1024)
    print('接收到服务器的返回消息为:', data.decode())

两条示例说明:

  1. 在客户端发送消息时,可以通过输入“exit”来退出聊天室。当客户端输入“exit”时,服务器会将该客户端的socket对象从列表中移除,然后关闭该客户端的socket连接。

  2. 在客户端接收服务器返回结果时,可以使用try-except语句来处理异常情况,例如当客户端与服务器的连接断开时,客户端无法接收到服务器的返回结果,此时需要捕获异常并进行相应处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python socket C/S结构的聊天室应用实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python标准库os.path包、glob包使用实例

    下面是Python标准库os.path包、glob包使用实例的攻略。 什么是os.path包和glob包 os.path包 os.path模块是Python的标准库之一,提供了处理文件和目录路径的函数与变量。在不同的操作系统中,文件和目录的路径分隔符可能是不同的,os.path模块可以自动适配操作系统的路径分隔符。 glob包 glob模块是Python的标…

    python 2023年6月2日
    00
  • 处理 HTML 以删除和关闭 Python 中的打开标签

    【问题标题】:Handle HTML to remove and close open tags in Python处理 HTML 以删除和关闭 Python 中的打开标签 【发布时间】:2023-04-02 23:40:01 【问题描述】: 我正在尝试使用 HTMLParser 在 Python 中处理没有结束标签或无效结束标签的 HTML: 条目: &l…

    Python开发 2023年4月8日
    00
  • Python + selenium 自动化测试框架详解

    Python + Selenium 自动化测试框架详解 什么是自动化测试框架? 自动化测试框架是一系列工具和库的集合,它们可以协调工作以自动化执行测试。Python + Selenium 自动化测试框架是为 Selenium 设计的一种 Python 框架。 安装 Python 和 Selenium 在开始使用 Python + Selenium 自动化测试…

    python 2023年5月19日
    00
  • Python-接口开发入门解析

    在Python中,可以使用Flask、Django等框架开发Web接口。以下是Python接口开发入门解析的详细攻略: 使用Flask框架开发接口 Flask是一个轻量级的Web框架,可以用于开发RESTful接口。以下是使用Flask框架开发接口的示例: from flask import Flask, jsonify app = Flask(__name…

    python 2023年5月14日
    00
  • Python列表常见操作详解(获取,增加,删除,修改,排序等)

    以下是详细讲解“Python列表常见操作详解(获取,增加,删除,修改,排序等)”的完整攻略。 Python列表常见操作 在Python中,列表是种常见的数据类型,它可以存储任意类型的数据,包括数字、字符串、列表、元组、字典等。下面是Python列表见操作的详细说明。 获取列表元素 获取列表元素是列表操作最基本的操作之一。可以使用下标(索引)的方式获取列表中的…

    python 2023年5月13日
    00
  • 关于pytest结合csv模块实现csv格式的数据驱动问题

    关于pytest结合csv模块实现csv格式的数据驱动问题的攻略如下: 1. 安装pytest和csv模块 在使用pytest和csv模块之前,需要先安装这两个模块。可以使用pip install命令来安装: pip install pytest pip install csv 2. 准备测试数据 在使用csv模块之前,需要准备好测试数据所在的csv文件。假…

    python 2023年6月3日
    00
  • 如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?

    【问题标题】:How to check S_ISREG for a Windows NTFS file over SFTP in Python?如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件? 【发布时间】:2023-04-02 10:49:01 【问题描述】: 我正在连接到 SFTP 服务器 (NTFS…

    Python开发 2023年4月8日
    00
  • python爬虫爬取网页数据并解析数据

    下面是“python爬虫爬取网页数据并解析数据”的完整攻略: 1. 爬虫基础知识 在进行Python爬虫之前,我们需要了解一些基础知识,例如: HTTP协议 抓包工具 HTML、CSS、JavaScript 正则表达式 lxml、Beautiful Soup等解析库 2. 分析目标网站 在进行爬取之前,我们需要分析目标网站的结构,找到需要爬取的具体数据。 我…

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