Python基于Socket实现简易多人聊天室的示例代码

yizhihongxing

下面是详细的攻略。

Python基于Socket实现简易多人聊天室

概述

在本示例中,我们将使用Python的Socket库建立一个简单的多人聊天室。我们将会通过网络实现实时通信,让不同的客户端可以在同一台主机上互相聊天,并且能够观察到其他用户的消息。

实现步骤

1. 创建服务端

在Python中使用Socket实现多人聊天室,需要先创建一个服务端程序,接受客户端的连接,然后将客户端连接记录下来,并在后台运行。下面是创建服务端程序的步骤:

  1. 初始化Socket对象,指定网络通信协议和类型。

python
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  1. 将Socket绑定到指定的IP地址及端口号。

python
server_socket.bind(('127.0.0.1', 9999))

  1. 开始监听连接,等待客户端的连接请求,如果有客户端连接,就接受这个连接,并返回一个新的Socket对象。

python
server_socket.listen(5)
client_socket, address = server_socket.accept()

  1. 在新的线程中为新连接的客户端建立一个独立的通信通道。

python
thread = threading.Thread(target=communicate, args=(client_socket, address))
thread.start()

以上就是服务端实现的主要步骤,下面来看一下完整的示例代码。

import socket
import threading

def communicate(client_socket, address):
    while True:
        data = client_socket.recv(1024)
        if not data:
            break
        print(f"{address}: {data.decode()}")
        # 这里可以将消息转发给其他的客户端
    client_socket.close()

def main():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1', 9999))
    server_socket.listen(5)
    while True:
        client_socket, address = server_socket.accept()
        print(f"客户端{address}已连接")
        thread = threading.Thread(target=communicate, args=(client_socket, address))
        thread.start()

if __name__ == '__main__':
    main()

2. 创建客户端

在Python中创建客户端程序,需要先连接到服务端,然后建立一个独立的通信通道,实现与服务端的互动。下面是创建客户端程序的步骤:

  1. 初始化Socket对象,指定网络通信协议和类型。

python
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  1. 连接到指定的IP地址和端口号。

python
client_socket.connect(('127.0.0.1', 9999))

  1. 在新线程中发送消息。

python
thread = threading.Thread(target=send_message, args=(client_socket,))
thread.start()

  1. 在主线程中接收消息。

python
while True:
data = client_socket.recv(1024)
if not data:
break
print(data.decode())
client_socket.close()

以下是客户端的完整实现代码:

import socket
import threading

def send_message(client_socket):
    while True:
        message = input()
        client_socket.sendall(message.encode())

def main():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('127.0.0.1', 9999))
    thread = threading.Thread(target=send_message, args=(client_socket,))
    thread.start()
    while True:
        data = client_socket.recv(1024)
        if not data:
            break
        print(data.decode())
    client_socket.close()

if __name__ == '__main__':
    main()

示例说明

示例1:多人聊天室的实现

在此处我们介绍一下如何运行这个程序,在此前提下,我们需要使用两个命令行窗口,一个窗口用来运行服务端程序,另外一个窗口用来运行客户端程序。在window中可以使用"cmd"进入命令行,macos和linux则可以使用"terminal"程序。

首先,我们需要在一个命令行窗口中运行服务端程序,然后在另一个命令行窗口中运行客户端程序。

在服务端命令行窗口中输入如下命令:

python server.py

在客户端命令行窗口中输入如下命令:

python client.py

接着,我们就可以在客户端窗口中输入消息,来跟其他的在线用户聊天啦!

示例2:程序出现异常的处理

在运行这个程序时,有可能会出现一些异常情况,如Socket端口重复、地址错误、数据传输出现异常等等。

在程序中我们可以通过使用"try...except..."语句块来捕捉这些异常,从而避免程序崩溃。

例如,在运行服务端程序时,如果端口号被占用的话,会抛出"socket.error: An attempt was made to access a socket in a way forbidden by its access permissions"异常。我们可以在程序中使用"try...except..."语句块坚持这个异常,并处理这个异常:

import socket
import threading

def communicate(client_socket, address):
    while True:
        try:
            data = client_socket.recv(1024)
            if not data:
                break
            print(f"{address}: {data.decode()}")
            # 这里可以将消息转发给其他的客户端
        except socket.error as e:
            print(f"发生异常:{e}")
            break
    client_socket.close()

...

在上述代码中,我们在"communicate"函数中使用"try...except..."语句块捕捉了所有Socket相关的异常,并在发生异常时输出异常信息。

类似的,在客户端代码中也可以使用"try...except..."语句块来处理异常。同时,我们也可以增加一些"if...else..."语句块来针对不同的异常情况进行处理。

总结

以上就是我们实现一个简单的多人聊天室的示例程序,基于Socket实现网络通信,使用Python开发。我们在程序中运用了Python的Socket库、多线程、异常捕捉等技术,让我们可以在同一主机上借助网络实现实时聊天。同时,我们还介绍了程序的异常处理、运行及调试技巧,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于Socket实现简易多人聊天室的示例代码 - Python技术站

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

相关文章

  • python 自动监控最新邮件并读取的操作

    下面是Python自动监控最新邮件并读取的操作的完整攻略: 1. 准备工作 在进行Python自动监控最新邮件并读取的操作之前,我们需要进行一些准备工作。具体来说,我们需要用到Python的内置模块impaplib和email。其中,impaplib模块用于发送和接收邮件,email模块用于解析邮件内容。 我们可以在Python中使用以下命令安装这两个模块:…

    python 2023年5月19日
    00
  • Python实现简单猜数字游戏

    实现猜数字游戏的主要思路是通过Python代码生成一个随机数字,然后让玩家猜测这个数字是多少,最后比对玩家猜测的数字和随机数字是否一致。 以下是实现猜数字游戏的完整攻略: 步骤1:生成随机数字 在Python中,可以使用random模块的randint函数来生成随机整数。下面是一个例子: import random num = random.randint(…

    python 2023年5月13日
    00
  • 详解Python实现进度条的4种方式

    详解Python实现进度条的4种方式 在Python中,实现进度条是很有用的功能,特别是当你需要处理大量数据时。在本文中,我们将详细介绍4种Python实现进度条的方式。 1. 使用tqdm模块 tqdm模块是一个快速、可扩展的Python进度条库,可以轻松实现各种进度条。它非常易于使用,只需一行代码即可开始跟踪进度。 安装tqdm模块 你可以通过以下命令在…

    python 2023年6月3日
    00
  • Python爬虫包 BeautifulSoup  递归抓取实例详解

    下面开始详细讲解“Python爬虫包 BeautifulSoup 递归抓取实例详解”。 1. 前言 为了更好的理解本文内容,你需要有一定的 Python 编程基础和 HTML 基础。如果你还不了解,可以先去了解一下。 在本文中,我们将使用 BeautifulSoup 这个 Python 爬虫包来实现递归抓取目标数据的功能。递归抓取的含义是:不断的按照某一规律…

    python 2023年5月14日
    00
  • Python/Pandas:根据共同的行标识符和唯一的行列组合从不同的数据帧中划分数字列

    【问题标题】:Python/Pandas: Divide numeric columns from different dataframes based on a common row identifier and unique row-col combinationPython/Pandas:根据共同的行标识符和唯一的行列组合从不同的数据帧中划分数字列 【…

    Python开发 2023年4月5日
    00
  • 简单总结Python中序列与字典的相同和不同之处

    下面是关于Python中序列与字典相同和不同之处的详细讲解。 序列和字典 在Python中,序列和字典都是非常常见的数据结构,两者都可以存储多个元素,但它们有一些明显的区别。 序列 序列是一个有序的元素集合,其中的每个元素都可以通过索引进行访问。Python中常见的序列类型包括字符串、列表和元组。 相同之处 都是容器类型,可以存储多个元素 可以使用for循环…

    python 2023年5月13日
    00
  • Python教程使用Chord包实现炫彩弦图示例

    接下来我将详细讲解“Python教程使用Chord包实现炫彩弦图示例”的完整攻略。 准备工作 在开始使用Chord包实现炫彩弦图之前,我们需要先安装必要的依赖,其中包括: Python 3.5 及以上版本 matplotlib numpy pandas chord 其中,matplotlib、numpy和pandas可通过pip命令进行安装,而chord需要…

    python 2023年5月18日
    00
  • 10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)

    下面是对题目“10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)”的详细讲解,包含代码教程和示例: 1. 简介 本文介绍如何使用 Python 代码实现自动发送短信的功能,以及为什么这个功能特别适用于不想回复工作邮件的场景。本文的代码只需要 10 行 Python 代码,非常的简洁和实用。 2. 实现步骤 本文使用了中国移动的短信接口来实现…

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