当前位置: 首页 > article >正文

基于C#实现(WinForm)P2P聊天程序

♻️ 资源大小29.8MB➡️资源下载https://download.csdn.net/download/s1t16/87430269p2p聊天程序一、功能介绍1.1 登录用户凭用户名和密码登录系统可以更换服务器 IP 和端口以防网络不畅通连接服务器有 3 秒的超时时延。1.2 查询好友是否在线添加好友/接受好友请求用户可以通过好友学号添加好友如果好友在线发出好友请求对方可以选择接受或拒绝好友请求。1.3 与好友文字聊天添加好友后可双击好友名打开聊天窗口与好友进行文字聊天。1.4 文件传输在聊天窗口用户可以向好友发送文件好友收到文件名和大小后决定是否接收。1.5 多人文字聊天选做用户可以选择多个用户发起群聊成为群主。群聊窗口打开后群成员们可以多人聊天1.5.1 文件分发选做在群聊窗口中每个群成员都可以上传文件群成员上传的文件信息展示在群文件列表中。每个群成员都可以在群文件列表中双击下载文件。1.5.2 UDP 协议通信选做完成了使用 UDP 协议的文字聊天功能这个功能的实现是在一个单独的工程中因为如果两个客户端使用不同的协议则二者不能通信所以一个工程中最好使用统一的通信协议。1.6 设计模拟服务器选做为了调试的方便我设计了模拟服务器助教在课程群里说这可以作为选做之一。模拟服务器能完成助教提供服务器的所以功能同时在 UI 界面显示收到的消息。二、通信设计2.1 与服务器的通信登录、查询好友状态等操作需要与服务器进行通信。由于这些操作一般不需要与其他操作同时进行不需要并行可以让用户等待服务器的回应所以用简单的串行同步通信完成。2.2 添加好友每个客户端都需要设置一个好友请求的监听端口异步监听与异步接收当监听并收到到好友请求时用户选择是否接收好友请求根据用户的选择向对方的好友请求监听端口发送回应。2.3 单人聊天每个客户端都需要设置一个聊天请求的监听端口异步监听与异步接收。在用户双击好友名时会向对方的聊天请求监听端口发送聊天请求。当客户端聊天请求的监听端口接收到连接时马上向对方发送自己另一个可用的端口号并在这个端口号开启监听对方便会向这个端口号发起连接。双方在新的端口连接成功后创建聊天窗口并传入这个 TCP 连接双方之后的通信异步接收与发送都在这个 TCP 连接内完成。2.4 发起群聊每个客户端都需要设置一个群聊请求的监听端口异步监听与异步接收。当用户选择多个好友并点击“发起群聊”按钮时会向所选的每个好友的群聊监听端口发送群聊请求。当客户端群聊请求的监听端口接收到连接时马上向对方发送自己另一个可用的端口号并在这个端口号开启监听群聊发起方便会向这个端口号发起连接。2.5 群聊在群聊过程中为了保证群主的权限以及避免冗余的传输群主将承担消息中转站的作用。每个人的消息将发送给群主群主再将这些消息发送给除发送人以外的每个群成员。文件的信息包括文件名和文件大小会像文字消息一样分发但文件内容会存储在群主本地当有用户请求文件时向其发送。2.5.1 UDP 文字聊天UDP 文字聊天中有单独的接收线程如果接收到一条消息则向对方发送 ack n如果接收到 ack k则记录下来。当发送消息 n 时开启 5 秒的定时器 n如果定时器 n 当时还没有收到 ack n则向用户提示并重新发送。2.6 模拟服务器模拟服务器的设计采用了经典的服务器监听设计服务器在端口进行监听当有客户端发送消息时开辟一个新的线程对其内容进行处理并回复。三、通信协议3.1 添加好友在添加好友的端口由于接收方有拒绝接收好友请求的功能所以需要一个通信协议。双方消息类型有三类添加好友请求、接受好友请求、拒绝好友请求。message 为消息内容。消息类型message添加好友请求‘_f’ 对方用户名接受好友请求‘_y’ 对方用户名拒绝好友请求‘_n’ 对方用户名3.2 单人聊天单人聊天时双方之间发送的消息可能有三类文字消息、文件内容、文件名。将一方收到的字节流设为 message采用下面的通信协议消息类型message[0]message[1:end]文字消息1文字string文件内容2文件内容bytes文件名3文件名string3.3 群聊群聊的情况比较复杂群聊中分两种用户群主与群成员。群主从群成员处收到的消息有 5 种设群主收到的字节流为 message采用下面的通信协议消息类型message[0]message[1:end]文字消息0文字string文件内容2文件内容bytes文件长度和文件名3文件长度string”_” 文件名string用户退出消息4“q”string请求文件5文件长度string”_” 文件名string群主需要向群成员发送几种消息包括聊天信息某位成员发送的信息、群成员名群聊刚建立以及有成员退出群聊时群主向每位成员发送全部成员名、文件内容当群成员向群主申请文件时群主向该成员发送文件内容、文件信息当群里有其他成员上传文件时群主向大家发送文件信息、群组解散、没有找到文件群主没有找到成员申请的文件。设群成员收到的字节流为 message采用下面的通信协议消息类型message[0]message[1:end]文字消息0作者名string“_” 消息内容string成员名1所有成员名string拼接群主名在第一个。文件内容2文件内容bytes文件消息3文件长度string“” 上传者名字string ”” 文件名string群组解散4“q”没有找到文件5四、界面设计本项目的界面包括客户端和模拟服务器两大部分客户端包括登录界面、好友列表界面、聊天窗口和群聊窗口。4.1 客户端在登录界面、用户可输入用户名、密码、服务器 IP 和端口。这些都有默认值用户只需进行修改。在好友列表界面用户可实现添加好友、发起聊天、发起群聊功能。用户添加的好友会显示在好友列表用户双击好友名发起聊天。用户在好友列表单击选中若干好友点“发起群聊”按钮发起群聊。在聊天窗口用户可输入并发送文字信息也可以向对方发送文件。在群聊窗口用户可以输入文字信息和上传文件。用户上传的文件显示在群里所有人的文件列表内每个人都可以双击某文件来下载。4.2 模拟服务器模拟服务器能完成助教提供服务器的所以功能同时在 UI 界面显示收到的消息。五、总结这次大作业完成了相对比较完整的聊天软件的设计体验了自己设计软件通信、软件界面的感受属实不易。在完成大作业的过程中遇到来不少问题比如两个客户端通信的时序问题、双方握手的协议问题等。软件的一个界面内可能需要完成多个任务、需要监听多个端口这就要求设计者有一个清晰的思路和鲁棒的通信方式否则很容易陷入混乱。比如两个客户端在好友列表界面发起聊天如果直接将二者发起聊天的 socket 连接传入聊天窗口进行通信会出现通信与监听混乱的问题。所以需要当二者第一次连接后在新的端口重新进行连接。总之通过完成这次大作业我对课本理论知识的理解得到了提高动手能力和解决问题的能力得到锻炼。将理论知识应用到实际中给我带来了很大的成就感。

相关文章:

基于C#实现(WinForm)P2P聊天程序

♻️ 资源 大小: 29.8MB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87430269 p2p聊天程序 一、功能介绍 1.1 登录 用户凭用户名和密码登录系统,可以更换服务器 IP 和端口,以防网络不畅通,连接服务…...

ModernWMS核心功能详解:从ASN入库到Dispatch出库的完整工作流

ModernWMS核心功能详解:从ASN入库到Dispatch出库的完整工作流 【免费下载链接】ModernWMS The open source simple and complete warehouse management system is derived from our many years of experience in implementing erp projects. We stripped the origin…...

Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线

Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线 【免费下载链接】Style-Bert-VITS2 Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles. 项目地址: https://gitcode.com/gh_mirrors/st/Style-Bert-VITS2 Style-Bert…...

2026数据治理平台选型:五款产品如何赋能数据中台建设?

一、引言:数据中台的成败,关键在治理在数字化浪潮的席卷下,“数据中台”已成为当代企业信息化架构中的核心战略组件。然而,一个悖论正困扰着大量企业:数据中台的基础设施搭建日趋完善,但真正将数据转化为业…...

如何扩展GASShooter:添加新武器、新能力与新游戏机制的终极指南

如何扩展GASShooter:添加新武器、新能力与新游戏机制的终极指南 【免费下载链接】GASShooter Advanced FPS/TPS Sample Project for Unreal Engine 4s GameplayAbilitySystem plugin 项目地址: https://gitcode.com/gh_mirrors/ga/GASShooter GASShooter是Un…...

正视孩童情绪波动,耐心陪伴平稳疏导

孩子的情绪就像夏天的天气,前一秒还晴空万里,后一秒可能就乌云密布。面对突如其来的哭闹、发脾气或者闷闷不乐,很多家长会急着“灭火”——要么讲道理,要么直接制止。但其实,情绪波动本身不是问题,它是孩子…...

Hermes Agent 框架如何对接 Taotoken 作为自定义模型供应商并配置环境变量

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent 框架如何对接 Taotoken 作为自定义模型供应商并配置环境变量 Hermes Agent 是一个流行的 AI 代理开发框架&#xff0…...

WMPFDebugger与微信开发者工具对比:哪个更适合你的调试需求?

WMPFDebugger与微信开发者工具对比:哪个更适合你的调试需求? 【免费下载链接】WMPFDebugger Yet another WeChat miniapp debugger on Windows 项目地址: https://gitcode.com/gh_mirrors/wm/WMPFDebugger 在Windows平台的微信小程序开发中&#…...

从API Key管理视角看Taotoken平台的安全与审计功能

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从API Key管理视角看Taotoken平台的安全与审计功能 对于依赖大模型API进行开发的团队而言,API Key的管理与安全是项目稳…...

3个实用场景教你轻松解锁网易云音乐NCM加密文件:ncmdumpGUI完整指南

3个实用场景教你轻松解锁网易云音乐NCM加密文件:ncmdumpGUI完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的…...

如何在5分钟内使用CrewAI Studio快速搭建AI工作流:零代码AI智能体开发终极指南

如何在5分钟内使用CrewAI Studio快速搭建AI工作流:零代码AI智能体开发终极指南 【免费下载链接】CrewAI-Studio A user-friendly, multi-platform GUI for managing and running CrewAI agents and tasks. Supports Conda and virtual environments, no coding need…...

对比不同模型在创意生成任务中的效果与token消耗差异

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比不同模型在创意生成任务中的效果与token消耗差异 在为一场创意大赛准备素材时,我们面临一个常见的选择&#xff1a…...

Taotoken用量看板功能详解,助你洞察团队AI资源消耗模式

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板功能详解,助你洞察团队AI资源消耗模式 对于技术管理者或项目负责人而言,清晰了解团队的AI…...

如何快速上手Redux Dynamic Modules:5分钟完成Redux模块化改造

如何快速上手Redux Dynamic Modules:5分钟完成Redux模块化改造 【免费下载链接】redux-dynamic-modules Modularize Redux by dynamically loading reducers and middlewares. 项目地址: https://gitcode.com/gh_mirrors/re/redux-dynamic-modules Redux Dyn…...

如何快速掌握MPC视频渲染器:面向初学者的完整教程

如何快速掌握MPC视频渲染器:面向初学者的完整教程 【免费下载链接】VideoRenderer Внешний видео-рендерер 项目地址: https://gitcode.com/gh_mirrors/vi/VideoRenderer 想要在Windows系统上获得影院级的视频播放体验吗?MPC…...

NHSE终极教程:5分钟掌握动物森友会存档编辑技巧

NHSE终极教程:5分钟掌握动物森友会存档编辑技巧 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦!动物森友会》的收集烦恼吗?想快速打造梦想岛屿却…...

用PyTorch复现FactorVAE:一个能同时预测收益和风险的量化模型实战教程

用PyTorch实战FactorVAE:构建收益与风险双预测的量化模型 在量化投资领域,传统线性因子模型正逐渐被非线性机器学习方法所取代。然而金融数据特有的低信噪比特性,使得直接从市场数据中提取有效因子成为一项艰巨挑战。本文将深入探讨如何利用P…...

【2026实测】怎么提高论文原创度?盘点8款主流降AI工具,附结构级优化指南

写文章最怕碰到什么,是辛辛苦苦自己码出来的字,却被标了极高的AI值。目前很多文本审核机制对内容的原创度要求极高,纯手写的初稿也可能因为句式太工整被判定为机器生成的。 为了帮几个快被这事折腾疯了的学弟学妹找条出路,我花了…...

Frida无Root Hook PC微信小程序源码(Electron+Chromium)

1. 这不是“破解”,而是一次对微信小程序运行机制的逆向观察 你有没有试过,在PC版微信里点开一个小程序,想看看它背后是怎么写的?比如某个电商小程序的优惠券逻辑、某个工具类小程序的数据渲染方式,甚至只是单纯好奇—…...

BiliBiliCCSubtitle终极指南:5个实战技巧高效下载B站字幕

BiliBiliCCSubtitle终极指南:5个实战技巧高效下载B站字幕 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为无法保存B站视频字幕而烦恼&#xff1…...

XZ1018,100V,40A,NMOS 封装:TO252

封装&#xff1a;TO252类型&#xff1a;NVDS&#xff1a;100V VGS&#xff1a; 20V ID&#xff1a;40ARDS(ON)&#xff1a;10V <14mΩRDS(ON)&#xff1a;4.5V <19mΩ型号&#xff1a; XZ1018 封装&#xff1a;TO252类型&#xf…...

如何利用开源工具Unlock-Music解决音乐平台加密格式兼容问题

如何利用开源工具Unlock-Music解决音乐平台加密格式兼容问题 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…...

XZ6128A工作电压5-100V 输出电流5A 升压型大功率LED灯恒流驱动控制芯片

概述 XZ6128A是一款高效率、高精度的升压型大功率LED灯恒流驱动控制芯片。 XZ6128A内置高精度误差放大器&#xff0c;固定关断时间控制电路&#xff0c;恒流驱动电路等&#xff0c;特别适合大功率、多个高亮度LED灯串的恒流驱动。 XZ6128A采用固定关断时间的控制方式&#xff0…...

人工智能的伦理与安全:这3个问题,软件测试从业者必须重视

随着大语言模型、生成式AI的爆发式落地&#xff0c;人工智能已经从实验室走向千行百业的生产场景&#xff0c;深刻改变着软件开发与交付的逻辑。对于直接把控产品质量关口的软件测试从业者来说&#xff0c;我们的职责早已不再是单纯验证功能可用性、排查性能bug那么简单——AI系…...

AB包相关知识

Lua与AB包/Addressables以及YooAsset 摘自千问&#xff1a; Lua 是菜谱&#xff08;逻辑&#xff09;&#xff1a;决定了菜怎么做&#xff0c;味道如何。因为你需要随时换菜谱&#xff08;热更新&#xff09;&#xff0c;所以菜谱不能死板地印在墙上&#xff08;编译进主包&a…...

AI算法工程师如何进行模型部署?这2个工具+3个技巧,快速上线

对于软件测试从业者来说&#xff0c;模型部署并不是一个陌生的概念——随着AI功能逐渐渗透到各类应用软件中&#xff0c;测试工程师不仅需要验证模型输出的准确性&#xff0c;更需要理解部署流程对模型稳定性、响应速度和结果一致性的影响。很多测试同学会有这样的困惑&#xf…...

机器学习的最佳实践:这7个原则让你的模型更稳定

对于软件测试从业者而言&#xff0c;机器学习技术正在快速融入测试流程&#xff1a;从自动化测试用例生成、缺陷预测到测试环境异常检测&#xff0c;机器学习模型的稳定性直接决定了测试结果的可靠性——如果模型在测试环境波动、输入数据变化时性能骤降&#xff0c;不仅无法提…...

基于LSTM自编码器的家用电器功耗异常检测系统构建指南

1. 项目概述&#xff1a;从能耗洞察到智能干预我们每天都在和各种家用电器打交道&#xff0c;从清晨唤醒你的咖啡机&#xff0c;到深夜还在默默工作的路由器。你有没有想过&#xff0c;这些看似微不足道的设备&#xff0c;其背后隐藏的能耗模式&#xff0c;其实大有文章&#x…...

猫抓浏览器扩展终极指南:5分钟掌握全网视频资源下载技巧

猫抓浏览器扩展终极指南&#xff1a;5分钟掌握全网视频资源下载技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到心仪的视频无法…...

Redis 客户端连接详解

Redis 客户端连接详解 引言 Redis 是一款高性能的内存数据结构存储系统,常用于缓存、会话管理、实时排行榜等功能。客户端连接是 Redis 生态系统中的重要组成部分,本文将详细介绍 Redis 客户端连接的相关知识,包括连接方式、连接配置、连接管理等方面。 Redis 客户端连接…...