Python网络编码——聊天小工具

实战|轻松用 Python 开发一个简单有趣的聊天小程序 前言 Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。 UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。 UDP 的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用 UDP 较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。 比如我们聊天用的 QQ 就是使用的 UDP 协议。 ——摘自百度百科 今天的分享内容是使用 阅读详情

目录

基本概念

‌一、TCP(Transmission Control Protocol)‌

1. 核心特性

2. 三次握手流程

3. 四次挥手流程

4. 典型应用场景

‌二、UDP(User Datagram Protocol)‌

1. 核心特性

2. 数据报文结构

3. 典型应用场景

‌三、Socket‌

1. 概念本质

2. Socket 类型

3. 关键函数(以C为例)

4. 编程模型对比

‌四、核心对比表格‌

‌五、关键问题解析‌

‌六、总结建议‌

案例部署 

TCP编程

UDP部署 


基本概念

‌一、TCP(Transmission Control Protocol)‌

1. 核心特性
  • ‌面向连接‌:通信前需通过 ‌三次握手‌ 建立连接,通信后通过 ‌四次挥手‌ 断开连接。
  • ‌可靠传输‌:通过确认机制(ACK)、超时重传、流量控制(滑动窗口)和拥塞控制保证数据可靠性。
  • ‌有序传输‌:数据按发送顺序到达接收端。
  • ‌全双工通信‌:双方可同时发送和接收数据。
2. 三次握手流程
Client            Server 
|--- SYN=1, seq=x -->| 
|<-- SYN=1, ACK=1, seq=y, ack=x+1 --| 
|--- ACK=1, seq=x+1, ack=y+1 -->| 
3. 四次挥手流程
Client            Server 
|--- FIN=1, seq=u -->| 
|<-- ACK=1, seq=v, ack=u+1 --| 
|<-- FIN=1, ACK=1, seq=w, ack=u+1 --| 
|--- ACK=1, seq=u+1, ack=w+1 -->| 
4. 典型应用场景
  • Web 浏览器(HTTP/HTTPS)
  • 文件传输(FTP)
  • 电子邮件(SMTP/POP3)

‌二、UDP(User Datagram Protocol)‌

1. 核心特性
  • ‌无连接‌:无需建立连接,直接发送数据。
  • ‌不可靠传输‌:不保证数据到达、不保证顺序、不检测丢包。
  • ‌高效性‌:头部仅 8 字节(TCP 头部 20-60 字节),传输开销小。
  • ‌支持广播/组播‌:可同时向多个目标发送数据。
2. 数据报文结构
+--------+--------+--------+--------+ 
| Source Port | Destination Port | 
| Length | Checksum | 
| Data... | 
+------------------------------------+ 
3. 典型应用场景
  • 实时音视频传输(Zoom/Skype)
  • DNS 查询
  • 在线游戏(实时位置同步)

‌三、Socket‌

1. 概念本质
  • ‌操作系统提供的网络编程接口‌:介于应用层和传输层之间的抽象层。
  • ‌端点标识‌:由 IP 地址 + 端口号 唯一标识。
  • ‌支持协议‌:可配置为 TCP 或 UDP 模式。
2. Socket 类型
类型协议特性
SOCK_STREAMTCP可靠、有序、面向连接
SOCK_DGRAMUDP不可靠、无序、无连接
SOCK_RAW-原始套接字(操作IP层)
3. 关键函数(以C为例)
  • ‌TCP Server‌: socket() -> bind() -> listen() -> accept() -> recv()/send()
  • ‌TCP Client‌: socket() -> connect() -> send()/recv()
  • ‌UDP‌: socket() -> bind() -> recvfrom()/sendto()
4. 编程模型对比
TCPUDP
连接性需要维护连接状态无状态
数据边界流式数据(需处理粘包)数据报(自带边界)
性能高可靠性但延迟较高低延迟但可能丢包

‌四、核心对比表格‌

特性TCPUDP
连接方式面向连接无连接
可靠性可靠传输(确认+重传)最大努力交付
数据顺序保证顺序不保证顺序
头部大小20-60 字节8 字节
传输速度较慢(需握手和确认)极快
流量控制滑动窗口机制无
拥塞控制多种算法(如Reno、Cubic)无
适用场景文件传输、网页浏览实时视频、DNS查询

‌五、关键问题解析‌

  1. ‌TCP粘包问题‌:

    • 原因:TCP是字节流协议,不保留消息边界。
    • 解决方案:
      • 固定长度消息
      • 分隔符(如\n)
      • 消息头声明长度(如HTTP协议)
  2. ‌UDP的可靠性实现‌:

    • 需在应用层添加:序列号、确认机制、重传策略(类似QUIC协议)
  3. ‌Socket的复用技术‌:

    • 端口复用:setsockopt(SO_REUSEADDR)
    • IO多路复用:select/poll/epoll(Linux)或 kqueue(BSD)

‌六、总结建议‌

  • ‌选择TCP‌:当需要数据完整性和顺序性(如金融交易)
  • ‌选择UDP‌:当需要低延迟和可容忍部分丢包(如直播、VoIP)
  • ‌Socket编程要点‌:
    • TCP需处理连接生命周期
    • UDP需处理报文分片(MTU限制)
    • 始终考虑网络字节序转换(htonl/ntohl)

案例部署 

TCP编程

服务端

代码如下,想偷懒就偷吧:

import socket

host='192.168.137.101'
port=33333

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#前为模块,后为函数,AF_INET表示IPv4,sock_stream表示TCP协议
s.bind((host,port))

s.listen(1) #允许建立链接数

sock,addr=s.accept()

print('链接成功')

info=sock.recv(1024).decode()
#允许接收数据文件大小,单位字节         decode[解码],encode【编码】

while info != 'bye':    #info:客户向服务端发送的消息
        if info:
            print('接收的信息为:'+info )   #+:变量的拼接
            send_data=input('输入信息:')
            send_data=str(send_data)    #转化为纯字符串
            sock.send(send_data.encode())
            if send_data=='bye':
                break
        info=sock.recv(1024).decode()
sock.close()    #断开链接
s.close()

客户端

代码如下,想偷懒就偷懒吧

import socket
s=socket.socket()

host='192.168.137.101'
port=33333

s.connect((host,port))

print('链接成功')

info='' #客户info开始可定义为空
while info != 'bye':
        send_data=input('请输入相应的信息:')

        send_data=str (send_data)
        s.send(send_data.encode())
        if send_data =='bye':
             break
        info=s.recv(1024).decode()    #发送编码,接收解码
        print('接收信息为:' +info)
s.close()

UDP部署 

服务端

代码如下:

import socket

host='192.168.137.101'
port=33333

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind((host,port))

print("服务端已启动")

while True:
    data,addr=s.recvfrom(1024)
    print(f"收到来自{addr}的消息:{data.decode()}")
    if data.decode() =='bye':
        break
    reply =input("回复消息:")
    s.sendto(reply.encode(),addr)

s.close

客户端

代码如下:

import socket

host='192.168.137.101'
port=33333

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while   True:
    msg=input("输入消息:")
    s.sendto(msg.encode(),(host,port))
    if msg =='bye':
        break
    data,addr=s.recvfrom(1024)
    print(f"收到回复:{data.decode()}")

s.close()

 

python基础:网络编程案例:编写简单的qq聊天 qq聊天 分别使用基于tcp协议以及基于udp协议的scoket程序 首先创建基于tcp协议的程序: 分别创建服务端和客户端: 运行时,首先运行服务端,服务端只能绑定一次地址,再次运行将会报错。然后运行客户端,如果首先运行客户端,会因为找不到服务端地址而报错 服务端程序: # 创建服务器 import socket # 创建套接字 server_sk = socket.socket(socket.... 阅读详情

相关推荐

基于socketserver的python多线程聊天室

在python中,socketserver提供的读写是基于byte字节的。故发送字符数据需要先编码。接受到的数据需要解码。 #Talk is cheep, show you the code. server: """everytime before you send msg, encode it after you rec msg, decode it! """ import so

3087

小工具———字符编码转换查看(MFC)

最近这一年多的工作当中,有很多工作都涉及到了编码问题,每次都要去网上查很麻烦,所以,现在自己写了一个工具,方便查看各种各样的字符编码。 是用VS2012写的,用了MFC。 直接上图吧 说明: **1.**URL编码 对空格处理成“+”号,还有一种是处理成%20,而不同的标准对空格处理也不同,详情请看我的另一篇文章 关于URL编码 对空格的处理问题:https://blog.csdn....

发呆的程序猿 3024

实战 | 轻松用 Python 开发一个简单有趣的聊天小程序

实战 | 轻松用 Python 开发一个简单有趣的聊天小程序

python03011的博客 1387

发布一个小工具(HTML、URL编码工具)

这个工具能够将文本转变为HTML、URL编码格式,同时也能解码。 请访问:http://enc.xpus.net 欢迎大家多提意见~ 转载于:https://www.cnblogs.com/AndersLiu/archive/2008/01/25/html-url-encode-decode-tool.html...

weixin_30432007的博客 434

基于Python的语音聊天应用开发实战项目

为了让 UDP 更可靠,我们需要添加一些元数据:Ld')这样接收方就能检测丢包、乱序,并做出相应处理。这种高度集成的设计思路,正引领着智能音频设备向更可靠、更高效的方向演进。随着 WebRTC、AI 降噪、神经网络编解码等新技术的发展,未来的语音通信将更加自然、流畅和安全。无论你是想做一个简单的语音备忘录,还是打造企业级的远程协作平台,本文介绍的技术栈都能为你提供坚实的起点。记住,最好的系统不是一次性建成的,而是在不断迭代中完善的。现在就开始动手吧!💪本文还有配套的精品资源,点击获取。

weixin_42590539的博客 726

小工具URL编码

NULL 博文链接:https://aa80303857.iteye.com/blog/2358860

Python网络编程:从Socket基础到多线程聊天室

本文介绍了Python网络编程的基础知识,从Socket概念到多线程聊天室实现。主要内容包括: 网络编程基础:IP地址、端口号和TCP/UDP协议 Socket编程入门:创建Socket对象和基本通信流程 数据编码解码:字符串与二进制转换及注意事项 TCP通信实现:服务器端和客户端的基本代码示例 长连接通信:与短连接的对比及实现方式 多线程优化:使用多线程处理多客户端连接 通过代码示例展示了网络编程的核心概念和实际应用,适合Python开发者学习网络编程基础。

lyx3313696759的博客 1593

编码转换小工具

编码转换 是一款实用软件,功能强大! 包含了许多功能。方便开发,破解过程中进行代码分析转换

python聊天室详细教程_python简单实现聊天室功能(代码教程)

聊天室程序需求:我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天。如下图:这里我们首先要知道《python网络编程》知识,其中要明白什么是Socket以及如何使用Socket 实现不同主机间的通信。OK,我这里直接上TCP版本的server.py和client.py文件运行时分别运行serv...

weixin_42362003的博客 5606

编码转换小工具(UTF-8转GB2312)

因为开发时几个项目编码不一致。。无聊写了个小东西、、UTF-8转GB2312

从原理图到PCB:手把手教你绘制DRV8301驱动板(附完整代码与避坑指南)

本文详细介绍了如何从原理图设计到PCB布局,手把手教你绘制DRV8301驱动板,特别适用于FOC(磁场定向控制)系统开发。内容涵盖元器件选型、电源树架构设计、栅极驱动电路、PCB布局技巧、焊接调试及代码配置,并附有完整代码与常见问题避坑指南,帮助工程师快速掌握DRV8301驱动板的设计与优化。

weixin_33716941的博客 394

python基于udp的网络聊天室报告_python实现udp聊天窗口

要与对方实现通讯,有udp和tcp两种方式,像我们的qq,就是udp和tcp两种方式共存的,不过现在qq正在逐步的转化为tcp服务器。下面是,用udp实现的聊天窗口.import socketdef send_msg(upd_socket):"""发送消息"""# 获取要发送的内容dest_ip = input("请输入对方的ip地址:")dest_port = int(input("请输入对方的...

weixin_39610721的博客 822

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。

weixin_29325955的博客 305

python网络编程

定义:Socket是应用层与传输层之间的抽象接口,提供网络通信的编程接口。作用:实现不同主机或同一主机上的进程间通信。类型流式Socket(SOCK_STREAM):基于TCP,可靠、面向连接。数据报Socket(SOCK_DGRAM):基于UDP,无连接、不可靠。原始Socket(SOCK_RAW):直接访问底层协议(如IP、ICMP)。工作流程服务端:创建Socket → 绑定IP和端口(bind)→ 监听(listen)→ 接受连接(accept客户端:创建Socket → 连接服务端(

2501_91114776的博客 1260

别再用MounRiver了!在VSCode里用PlatformIO搞定CH32V208开发(附完整配置流程)

本文详细介绍了如何在VSCode中使用PlatformIO进行CH32V208开发,替代传统的MounRiver Studio。通过完整的配置流程和优化技巧,开发者可以构建高效、现代化的RISC-V开发环境,显著提升编译速度和开发效率。

weixin_28711397的博客 534

可视化工具--Plotly

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

YFater的博客 1万+

网络匿名聊天室

【局域网匿名聊天室解决方案】 一款基于WebSocket的轻量级局域网聊天工具,支持文本/文件传输、用户管理和历史消息查询。技术栈采用Python后端(websockets库)和前端HTML/JS(TailwindCSS)。核心功能包括: 实时通信:文本消息和文件传输(需注意文件大小限制) 用户管理:在线列表显示及昵称修改 消息状态:显示发送/送达/已读状态 稳定性:自动重连+心跳检测机制 历史记录:支持分页加载和时间范围查询 使用方法: 安装依赖pip install websockets 启动Pytho

sxx207383681的博客 1127

脑电分析:为什么大脑信号会“变同步”?——事件相关同步化与去同步化 (ERS/ERD) 全景解析

脑电分析中的事件相关同步化(ERS)和去同步化(ERD)是研究大脑动态节律的重要方法,反映特定任务下脑电频段能量的变化。ERD表示神经元活动分散(功率下降),提示脑区活跃处理信息;ERS则反映神经元同步(功率增强),常与静息状态相关。本文详解了ERS/ERD的生理机制、计算流程(包括基线校正和功率谱分析),并提供了Python实现示例,展示如何通过Welch法和STFT进行时频分析,生成ERD/ERS热力图。该技术广泛应用于运动想象脑机接口、癫痫检测等领域,为理解大脑功能状态提供了量化工具。

qq_32516809的博客 1394

python 爬取钉钉聊天

我整理的一些关于【API】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/xltfov用 Python 爬取钉钉聊天记录的入门指南 在现代社交和商业通信中,钉钉成为了许多团队的首选工具。本文将指导你如何使用 Python 爬取钉钉的聊天记录。我们将从理解基本流程开始,逐步深入...

weixin_29480231的博客 2771

工创赛智能搬运小车实战:视觉定位、底盘控制与RTOS调度

智能搬运系统是嵌入式控制与机器视觉融合的典型工程实践,其核心在于视觉定位精度、运动控制稳定性与实时任务调度能力。在有限算力(如STM32H7)、低功耗约束和结构化场景下,传统CV方法(如FAST+RANSAC)比轻量级深度学习更具鲁棒性与实时性;而底盘控制需穿透PID表层,直击死区补偿、编码器硬件滤波与负载自适应等物理层细节;RTOS则不是炫技工具,而是保障多模块时序确定性的刚需——尤其在视觉-控制-执行强耦合链路中,任务优先级、事件组通信与栈安全直接影响系统存活。本文聚焦全国大学生工程训练竞赛(工创赛)真

weixin_29194693的博客 266

【网络安全 | 渗透工具】Hydra安装使用详细教程

Hydra,也称九头蛇,是一款非常强大的暴力破解工具(密码能否被破解关键在于字典是否足够强大),支持多种服务协议的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装。该工具支持以下协议的爆破:Hydra在kali中自带,这里介绍windows下的安装方法。zip下载地址:https://gitcode.com/maaaaz/thc-hydra-windows/tree/master下载完成后解压: 再将thc-hydra-windows-mast

等风来 9200

Python实现基于循环神经网络的智能聊天机器人系统

摘要:本文研究基于循环神经网络(RNN)的智能聊天机器人系统,采用seq2seq模型架构,使用GRU单元构建编码器-解码器结构。系统通过采集微信聊天记录构建问答数据集,经过jieba分词、词典构建等预处理后,训练基于注意力机制的神经网络模型。实验结果表明,该系统能够快速准确地回复用户输入,并模仿特定对话风格。研究实现了从数据处理、模型训练到实际应用的全流程开发,为个性化聊天机器人提供了可行方案。

毕业作品网站 1352

Modbus RTU/TCP协议栈手写实现:主从站设计、功能码、CRC、异常响应

本文从协议栈架构、帧结构、功能码、CRC校验、异常响应、主从站设计等多个维度,完整阐述了Modbus RTU/TCP协议栈的手写实现方案。帧间隔机制是RTU的核心,T3.5超时检测决定了帧边界识别CRC16查表法以512字节ROM换取8倍性能提升,适合嵌入式功能码路由表实现可扩展的代码架构,便于新增功能异常响应机制保障协议健壮性,每个错误都有明确反馈Modbus TCP在RTU基础上增加MBAP头,实现以太网扩展多核RTOS环境下的并发访问与线程安全RS-485总线的电气隔离与浪涌保护。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

python基于udp的网络聊天室报告_Python编程笔记 - 基于udp协议的聊天小程序

一、需求说明基于udp协议的聊天小程序:输入发送方的ip地址输入发送方的端口号输入本机接受信息时要绑定的端口号输入要发送的消息可给别人发送消息,同时也可以接受别人发来的消息。二、实现源码# -*- coding: utf-8 -*-# __author : Demon# date : 1/19/18 4:34 PM# 能收也能发from threading import *from socket ...

weixin_39890431的博客 890

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python实现多人聊天论文_python网络编程 双人多人聊天

在学习网路编程时,我们首先要考虑的是其中的逻辑,我们借助打电话的形式来了解网络编程的过程,我们打电话时属于呼叫方,接电话的属于被呼叫方,那么被呼叫方一直保持在待机状态,等待主呼叫方呼叫,只有在被呼叫方接听时双方才可以正常通话。那网络编程逻辑也是如此,在此之前我要调用import socketimport threading双人聊天1.被呼叫方:创建服务套接字≥服务套接字绑定主机绑定端口号≥建立最大...

weixin_39782752的博客 305

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Python打造一个互动交友聊天室,免费在线聊天

男女撩人的套路情话一问一答,各种套路满满的句子对话。接下来跟随我一起学习如何用 python 语言实现轻松撩人。 目录 1 项目准备 1.1 了解你的本地主机地址 1.2 辅助工具——网络调试助手 1.3 环境配置 2 编写代码 2.1 编写UDP程序发送socket数据 2.2编写UDP程序接收socket数据 2.3 聊天器 1 项目准备 1.1 了解你的本地主机地址 输入,在终端输入,即可看到你的本地主机地址。 1.2 辅助工具——网络调试助手 ...

闭关修炼——暂退 7544

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Python——MySQL远程控制
下一篇: LVS负载均衡
霖檬ing
博客等级 码龄2年 701粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值