python 使用socket制作聊天室-(附带 源码 可以直接运行)

这篇具有很好参考价值的文章主要介绍了python 使用socket制作聊天室-(附带 源码 可以直接运行)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python 使用socket制作聊天室

1.基本前提

为什么socket能做聊天室呢

  1. socket提供了通信的服务 比如你可以创建tcp udp的请求 向某个主机发起通信
    就像是你想和某人说话 你得会发音
  2. 就是提供了服务端的方式和客户端的方式
    服务端处理用户发起的请求
    客户端发送数据和接收服务端的响应数据
    就像你打开浏览器看视频 你作为客户端 发起请求 在某处的服务端(web服务器)会把请求接受处理
    返回相应的数据 通过浏览器(客户端)接受解析 就变成了看的见的网页数据

想搞定聊天室
1.需要一个服务端提供下服务

  1. 时刻接受链接进来的用户
  2. 接受用户的发送信息
  3. 对所有的用户发送广播 这样都能收到

2.需要多个客户端

1.链接进入聊天室
2.发送数据
3.接受广播数据

基本关系
python实现简易聊天室,pythonSet,python,网络,udp

2.服务端的搭建

1.导入socket包 创建通讯tcp等请求
导入threading包 使用线程来处理那些请求数据

import socket
import threading
#全局变量
SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

2.创建socket的实例tcp通信对象
socket.AF_INET, socket.SOCK_STREAM 是创建tcp的参数
百度可以了解更多 比如udp等

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

3.绑定端口 服务的套接字 也就是IP地址+端口号

 server_socket.bind((SERVER_HOST, SERVER_PORT))
 server_socket.listen(5) # 监听 最大可以链接的数量

4.进入循环中 等待客户端的链接

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

5.把链接的客户存放起来

# 存放链接进来聊天的用户
clients = []

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

使用线程 给进入的用户分配处理函数

# 开启线程
handle_client处理函数
client_socket 参数
thread = threading.Thread(target=handle_client, args=(client_socket,))
thread.start()

handle_client的定义
1.客户端第一次进来 需要输入自己的名称

def handle_client(client_socket):
    """处理客户端连接"""
    name = client_socket.recv(BUFFER_SIZE).decode()#接受客户端发来的名称
    print(f'[*] {name} 已连接')#服务端打印查看
    welcome = f'欢迎来到聊天室, {name}!\n'.encode()
    client_socket.send(welcome)#返回给客户端 欢迎的信息

2.循环 等待用户的连天数据发送

    while True:
        msg = client_socket.recv(BUFFER_SIZE)#接受用户发来的消息 比如 你好
        #处理用户的退出
        if msg.decode() == 'quit':
            print(f'[*] {name} 断开连接')
            client_socket.close()
            break
        #向聊天室的所有人广播
        broadcast(msg, name)

broadcast定义
clients 所有的链接客户
发送谁说了什么
send(f’{name}: {msg.decode()}'.encode())
encode 是转码的意思
decode 是解码的意思

def broadcast(msg, name):
    """向所有已连接的客户端广播消息"""
    for client in clients:
        client.send(f'{name}: {msg.decode()}'.encode())

服务端总结:

  1. 创建一个tcp的服务端
  2. 把链接的用户存放起来
  3. 第一次接受用户名字
  4. while循环接受发送的信息并广播出去

3. 客户端的搭建

引入socket包
引入threading包

import socket
import threading
#全局变量
SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

创建一个tcp通信

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

发起连接

 client_socket.connect((SERVER_HOST, SERVER_PORT))

发送自己的昵称

name = input('请输入您的昵称: ')
  # 发送昵称
name_bytes = name.encode()
client_socket.send(name_bytes)

开启线程进行聊天的处理

# 开启线程用来接收服务器发送的消息
    thread_output = threading.Thread(target=handle_output, args=(client_socket,))
    thread_output.start()

    # 开启线程用来处理用户输入的消息
    thread_input = threading.Thread(target=handle_input, args=(client_socket,))
    thread_input.start()

handle_input的定义
输入要发送的信息

def handle_input(client_socket):
    """处理用户输入"""
    while True:
        msg = input('')#输入要发送的信息
        client_socket.send(msg.encode())
        if msg == 'quit':#退出处理
            break

handle_output的定义
接受广播的数据展示出来

def handle_output(client_socket):
    """处理消息输出"""
    while True:
        msg = client_socket.recv(BUFFER_SIZE)#接收数据
        if msg.decode() == 'quit':
            break
        print(msg.decode())#展示

客户端总结

  1. 发起连接
  2. 进行昵称发送
  3. 发送信息
  4. 接受广播信息

4 完整的源码分享

服务端

import socket
import threading

SERVER_HOST = '0.0.0.0'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

def handle_client(client_socket):
    """处理客户端连接"""
    name = client_socket.recv(BUFFER_SIZE).decode()
    print(f'[*] {name} 已连接')
    welcome = f'欢迎来到聊天室, {name}!\n'.encode()
    client_socket.send(welcome)

    while True:
        msg = client_socket.recv(BUFFER_SIZE)
        if msg.decode() == 'quit':
            print(f'[*] {name} 断开连接')
            client_socket.close()
            break
        broadcast(msg, name)

def broadcast(msg, name):
    """向所有已连接的客户端广播消息"""
    for client in clients:
        client.send(f'{name}: {msg.decode()}'.encode())

if __name__ == '__main__':
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((SERVER_HOST, SERVER_PORT))
    server_socket.listen(5)
    print(f'[*] 正在听取端口 {SERVER_PORT}')

    clients = []

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

        # 开启线程
        thread = threading.Thread(target=handle_client, args=(client_socket,))
        thread.start()

客户端的代码

import socket
import threading

SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

def handle_input(client_socket):
    """处理用户输入"""
    while True:
        msg = input('')
        client_socket.send(msg.encode())
        if msg == 'quit':
            break

def handle_output(client_socket):
    """处理消息输出"""
    while True:
        msg = client_socket.recv(BUFFER_SIZE)
        if msg.decode() == 'quit':
            break
        print(msg.decode())

if __name__ == '__main__':
    name = input('请输入您的昵称: ')
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((SERVER_HOST, SERVER_PORT))

    # 发送昵称
    name_bytes = name.encode()
    client_socket.send(name_bytes)

    # 开启线程用来接收服务器发送的消息
    thread_output = threading.Thread(target=handle_output, args=(client_socket,))
    thread_output.start()

    # 开启线程用来处理用户输入的消息
    thread_input = threading.Thread(target=handle_input, args=(client_socket,))
    thread_input.start()

5.实验测试

开启服务
python实现简易聊天室,pythonSet,python,网络,udp
客户链接
python实现简易聊天室,pythonSet,python,网络,udp
服务检测
python实现简易聊天室,pythonSet,python,网络,udp
在连接一个用户
python实现简易聊天室,pythonSet,python,网络,udp
服务检测
python实现简易聊天室,pythonSet,python,网络,udp
发送消息
python实现简易聊天室,pythonSet,python,网络,udp
广播接受
python实现简易聊天室,pythonSet,python,网络,udp
这样就能聊天了
python实现简易聊天室,pythonSet,python,网络,udp

python实现简易聊天室,pythonSet,python,网络,udp
代码还有很多地方可以改进
可以直接复制粘贴使用文章来源地址https://www.toymoban.com/news/detail-720454.html

到了这里,关于python 使用socket制作聊天室-(附带 源码 可以直接运行)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Socket]Python用UDP协议建立带有私聊功能的网络聊天室-建立聊天工具

    前些天实习面试的时候被面试官问到Socket编程的问题,即“Socket创建和释放的具体过程是什么”,当时答不上来,似乎是涉及到发送和接收缓冲区的问题。由于自己在Socket编程这一块知识较为薄弱,于是写下这篇文章,当作复习下Socket编程知识。 首先,该实验是我在大三上学

    2024年02月03日
    浏览(48)
  • 使用 Node.js 和 Socket.io 构建可创建、可加入房间的实时聊天室

    通过可以加入房间的聊天室应用程序,首先可以回顾 Socket.io 的基本使用方法和流程,并在此基础上我们学习 join 、 to 两个 API 方法,从而实现简易的可加入房间的聊天系统。 Socket.io 、 express 和 ejs 。 在实现应用程序之前,我们先梳理一下我们需要的功能和流程。 所需功能

    2024年02月16日
    浏览(37)
  • Linux socket聊天室

    目录 一、运行效果 1、分别编译客户端和服务端代码 2、运行 3、使用效果  二、代码 chat.h 服务端代码  客户端代码 gcc client.c -o C -lpthread gcc server.c -o S -lpthread 先运行服务器端,8888为端口号 ./S 8888  再运行客户端,这里创建两个客户端,端口号要和服务端的一样 ./C 127.0.0.1

    2024年01月22日
    浏览(47)
  • 【一】【socket聊天室】-多线程,socket编程

    本文主要实现基于socket编程的聊天室,主要分为下面三个步骤: (1)多用户聊天:一个服务器多个客户端,客户端信息显示在公共的服务端窗口,利用 多线程 实现;          ——客户端双线程:一个接受线程一个发送线程(主线程);          ——服务器单线程:接收

    2024年02月08日
    浏览(45)
  • 【Java socket编程】多人聊天室

    课程设计大作业 功能: 1.具有 点对点通信 功能,任意客户端之间能够发送消息。 2.具有 群组通信 功能: 客户端可以 自主建立群组 ,添加或删除组成员; 客户端能够向组内成员同时发送消息,其他组成员不能收到。 3.具有 广播 功能 客户端能够向所有其他成员 广播消息

    2024年02月04日
    浏览(40)
  • C语言Socket编程TCP简单聊天室

    这是一个使用C语言进行套接字编程实现的简单聊天室, 使用Pthread库进行多线程执行 服务端: svr.c 客户端: cli.c Makefile: Makefile 执行编译 启动服务器 启动客户端 聊天 退出

    2024年02月03日
    浏览(54)
  • 【socket.js联合express】:搭建简约版聊天室

    本次项目利用express与socket.js 实现简约版聊天室,有用户登录及提示 用户退出及提示。聊天的显示 聊天室 该页面主要有四大块区域 头部用户输入登录与退出功能 左侧用户聊天显示区域 右侧用户列表显示区域 底部用户输入聊天内容区域 2.1功能描述 当用户在头部的输入框输

    2024年02月07日
    浏览(46)
  • Linux-Socket实现模拟群聊(多人聊天室)

    简单版本 服务端源码 客户端源码 服务器可以在特定的端口监听客户端的连接请求,若连接成功,服务器采用广播的形式向当前所有连接客户端发送该客户端登录成功消息多个客户端可以同时登录,在源码文件中可以配置最多群聊同时在线人数。服务端接收到客户端发送的群

    2024年02月10日
    浏览(93)
  • .NET编程——利用C#实现基于Socket类的聊天室(WinForm)

    在学习C#和MySQL实现注册登录和TCP协议的Socket通信后,本文将介绍如何利用Socket类中的异步通信函数来实现本地聊天室功能, Socket通信限制了客户端与客户端之间的通信,客户端只能接收来自服务器的消息而不能接收到客户端发送的消息,因此服务器最佳的选择是起到一个中

    2023年04月21日
    浏览(91)
  • 【你的第一个socket应用】Vue3+Node实现一个WebSocket即时通讯聊天室

    这篇文章主要是用WebSocket技术实现一个 即时通讯聊天室 ,首先先要了解为什么使用WebSocket而不是普通的HTTP协议,如果使用HTTP协议它是下面这种情况: 我发送一条消息,发送一个发送消息的请求;* 一直轮询接收别人发送的消息,不管有没有发送都要定时去调用接口。这里明

    2023年04月20日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包