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

yizhihongxing

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使用HTMLTestRunner导出饼图分析报告的方法

    Python使用HTMLTestRunner导出饼图分析报告的方法 在本文中,我们将介绍如何使用Python使用HTMLTestRunner库导出饼图分析报告。我们将使用unittest库编写测试用例,使用HTMLTestRunner库生成测试报告,并使用matplotlib库生成饼图。以下是详细的步骤和示例。 步骤1:安装必要的库 在使用Python使用H…

    python 2023年5月15日
    00
  • Python 序列化反序列化和异常处理的问题小结

    Python序列化反序列化和异常处理是 Python 编程中非常重要的话题。序列化是指把内存中的数据按一定的格式保存到硬盘或者传输,反序列化则是指从硬盘或者网络加载相应的数据并重新构造到内存中。异常处理则是指针对可能出现的各种意外情况进行预先的处理,从而使程序能够更加健壮的运行。 一、Python 序列化和反序列化 Python 中常见的序列化和反序列化格式…

    python 2023年5月13日
    00
  • python uuid模块使用实例

    当我们需要生成唯一标识符(UUID)时,可以使用 Python 中的 uuid 模块。uuid 模块默认实现了 UUID 版本 1、3、4、5。 UUID 版本说明 在使用 UUID 生成唯一标识符之前,我们需要了解 UUID 的版本以及它们的特点。 UUID1: 基于主机的 MAC 地址和当前时间戳生成,保证全球唯一性,但可能存在重复的风险。 UUID3:…

    python 2023年6月3日
    00
  • Python遍历目录的4种方法实例介绍

    Python遍历目录的4种方法实例介绍 在Python中,我们可以使用多种方法遍历目录。本文将对Python遍历目录的4种方法进行介绍,并提供实例示范。 方法一:os.listdir()方法 os.listdir()方法用于返回指定目录下的所有文件和目录名,我们可以使用for循环遍历得到每一个文件和目录的名称。具体代码示例如下: import os dir_…

    python 2023年6月2日
    00
  • Python里字典的基本用法(包括嵌套字典)

    现在我将为你详细讲解Python中字典的基本用法,包括嵌套字典,以下是详细攻略。 字典的基本用法 字典(dictionary)是 python3 中的一个重要数据类型,在字典中,每个数据都是由一个键和对应的值所组成的键值对。 创建字典 我们可以使用一对大括号来创建一个空字典,也可以在大括号中使用键值对的形式来创建字典。 # 创建空字典 dict1 = {} …

    python 2023年5月13日
    00
  • Python实现简易信息分类存储软件

    下面是“Python实现简易信息分类存储软件”的完整攻略。 一、项目背景 在日常生活和工作中,我们经常会遇到需要将某些信息进行分类存储的情况,例如人员名单、客户信息、学生档案等等。为了方便管理和查找,我们需要将这些信息按照一定方式进行分类存储。本项目旨在通过利用Python实现一个简易信息分类存储软件来实现这一目的。 二、技术选型 本项目的基础技术选项如下:…

    python 2023年6月3日
    00
  • Python基础之字典常见操作经典实例详解

    Python基础之字典常见操作经典实例详解 1. 字典简介 字典是Python中内置的一种数据类型,也是一种无序的、可变的映射类型。 字典的特点:- 使用键-值(key-value)对存储数据- 键必须是唯一的- 键是不可变对象(字符串、数字、元组等),值可以是任意类型的对象- 字典中的元素是无序的 2. 创建字典 字典可以通过花括号{}来创建,或者使用内置…

    python 2023年5月13日
    00
  • Python 保持递归形式

    Python 保持递归形式指通过使用尾递归和循环等技巧,使得递归函数的调用栈得以不断被压缩,从而可以最大程度地避免递归调用过深而导致的栈溢出等问题。下面将详细介绍如何保持递归形式的使用方法: 尾递归优化 尾递归指的是递归函数在调用自身后直接返回结果,不再对返回结果进行任何额外的处理,从而$渐进地消除每个递归调用。(这里的“渐进”指的是最终递归次数将到达一个恒…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部