news 2026/7/5 1:55:39

c#Socket学习,使用Socket创建一个在线聊天,数据模型(2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c#Socket学习,使用Socket创建一个在线聊天,数据模型(2)

数据结构:Socket_Study_Model

Socket_Study_Model数据结构层,定义了客户端与服务端之间交互的所有消息模型、枚举类型和通用消息格式,基于 JSON 序列化实现跨端数据传输,所有消息均通过统一的MessageStyle格式封装。
后期拓展就添加[XXXXX]Model然后服务和客户端都可以引用了。

欢迎消息-WelComMessageModel

服务端向新连接客户端发送的欢迎消息模型,是客户端建立连接后接收的首个消息。

usingSystem;namespaceSocket_Study_Model{/// <summary>/// 欢迎消息的model/// </summary>[Serializable]publicclassWelComMessageModel{/// <summary>/// 欢迎消息/// </summary>publicstringMessage{get;set;}publicWelComMessageModel(stringmessage){Message=message;}}}

StandMessageModel

标准消息模型,用于简单的点对点文本消息、系统提示、操作结果等基础消息,最常用的消息载体。

usingSystem;namespaceSocket_Study_Model{/// <summary>/// 标准消息/// </summary>[Serializable]publicclassStandMessageModel{publicstringSenderClientId{get;set;}publicstringTargetClientID{get;set;}publicstringMessage{get;set;}publicstringSenderName{get;set;}publicStandMessageModel(stringsenderId,stringtargetId,stringmessage){SenderClientId=senderId;TargetClientID=targetId;Message=message;}}}

OnlineUserModel.cs

在线用户相关模型,包含单个在线用户信息和在线列表响应结构,用于响应客户端的在线列表查询请求。

usingSystem.Collections.Generic;usingSystem;namespaceSocket_Study_Model{/// <summary>/// 在线用户信息模型/// </summary>publicclassOnlineUserModel{/// <summary>/// 客户端ID/// </summary>publicstringClientId{get;set;}/// <summary>/// 用户名(未设置则显示"未命名")/// </summary>publicstringUserName{get;set;}/// <summary>/// 最后活跃时间/// </summary>publicDateTimeLastActiveTime{get;set;}}/// <summary>/// 在线列表响应模型/// </summary>publicclassOnlineListResponseModel{/// <summary>/// 在线用户总数/// </summary>publicintTotalCount{get;set;}/// <summary>/// 在线用户列表/// </summary>publicList<OnlineUserModel>Users{get;set;}=newList<OnlineUserModel>();}}

MessageTypeEnum

消息类型,用于在MessageStyle设置消息类型

namespaceSocket_Study_Model{/// <summary>/// 消息类型枚举/// </summary>publicenumMessageTypeEnum{/// <summary>/// 未知类型/// </summary>Unknown=0,/// <summary>/// 欢迎消息/// </summary>Welcome=1,/// <summary>/// 普通文本消息/// </summary>Text=2,/// <summary>/// 广播消息/// </summary>Broadcast=3,/// <summary>/// 心跳消息/// </summary>Heartbeat=4,/// <summary>/// 私信/// </summary>PrivateMsg=5,/// <summary>/// 设置用户名/// </summary>SetUserName=6,/// <summary>/// 请求用户列表/// </summary>ListRequest=7,}}

MessageStyle

全局统一的消息格式封装类,是客户端与服务端之间传输的唯一消息载体。所有业务消息(如StandMessageModelBroadcastMessageModel)均序列化为字符串后存入Message字段,通过Type字段标识业务类型,实现消息的标准化传输。

usingNewtonsoft.Json;usingNewtonsoft.Json.Converters;namespaceSocket_Study_Model{/// <summary>/// 消息类型/// </summary>[System.Serializable]publicclassMessageStyle{/// <summary>/// 消息类型/// </summary>[JsonConverter(typeof(StringEnumConverter))]publicMessageTypeEnumType{get;set;}/// <summary>/// 对应 "clientId"/// </summary>publicstringClientId{get;set;}/// <summary>/// 消息/// </summary>publicstringMessage{get;set;}publicMessageStyle(stringclientId,stringmessage,MessageTypeEnummessageTypeEnum=MessageTypeEnum.Text){Type=messageTypeEnum;ClientId=clientId;Message=message;}}}

消息广播模型-BroadcastMessageModel

usingNewtonsoft.Json;usingNewtonsoft.Json.Converters;namespaceSocket_Study_Model{/// <summary>/// 广播消息模型/// </summary>[System.Serializable]publicclassBroadcastMessageModel{/// <summary>/// 消息类型/// </summary>[JsonConverter(typeof(StringEnumConverter))]publicBroadcastMessageTypeMessageType{get;set;}/// <summary>/// 消息/// </summary>publicstringMessage{get;set;}/// <summary>/// 发送者信息/// </summary>publicstringSenderClientId{get;set;}/// <summary>/// 发送时间/// </summary>publicSystem.DateTimeSendTime{get;set;}=System.DateTime.Now;/// <summary>/// 构造函数/// </summary>/// <param name="message">消息内容</param>/// <param name="senderClientId">发送者id</param>/// <param name="messageType">消息类型</param>publicBroadcastMessageModel(stringmessage,stringsenderClientId,BroadcastMessageTypemessageType=BroadcastMessageType.UserMessage){MessageType=messageType;Message=message;SenderClientId=senderClientId;}}/// <summary>/// 广播的消息类型/// </summary>publicenumBroadcastMessageType{/// <summary>/// 用户消息/// </summary>UserMessage=0,/// <summary>/// 警告消息/// </summary>Warning=1,/// <summary>/// 错误消息/// </summary>Error=2,/// <summary>/// 状态更新/// </summary>StatusUpdate=3,}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 8:43:35

微信视频号直播数据捕获全攻略:wxlivespy技术解析与应用实践

微信视频号直播数据捕获全攻略&#xff1a;wxlivespy技术解析与应用实践 【免费下载链接】wxlivespy 微信视频号直播间弹幕信息抓取工具 项目地址: https://gitcode.com/gh_mirrors/wx/wxlivespy 在当今直播电商蓬勃发展的时代&#xff0c;微信视频号已成为众多商家和内…

作者头像 李华
网站建设 2026/7/1 1:19:19

虚拟机中vivado安装实战案例(VMware环境)

在虚拟机里跑Vivado&#xff1f;我用VMware搭了一套丝滑的FPGA开发环境 最近接手一个Zynq项目&#xff0c;手头没有专用工作站&#xff0c;又不想在主力机上折腾双系统。怎么办&#xff1f;干脆在 VMware Workstation 里装个Ubuntu虚拟机&#xff0c;把Xilinx Vivado整个搬进…

作者头像 李华
网站建设 2026/7/3 15:29:53

Windows安卓应用革命性安装方案:APK Installer开启全新移动体验

你是否曾经希望在Windows电脑上直接运行手机应用&#xff1f;是否厌倦了笨重的安卓模拟器&#xff1f;现在&#xff0c;一款突破性的工具彻底改变了传统安装方式&#xff0c;让你无需虚拟机即可轻松部署APK文件。无论是开发者测试应用&#xff0c;还是普通用户想在电脑上使用手…

作者头像 李华
网站建设 2026/7/4 1:29:13

anything-llm能否检测重复内容?文档去重算法实践

Anything LLM 能否检测重复内容&#xff1f;文档去重算法实践 在企业知识库日益膨胀、个人文档不断积累的今天&#xff0c;一个看似简单却极易被忽视的问题正在悄悄影响着大语言模型&#xff08;LLM&#xff09;问答系统的质量——重复内容泛滥。 你有没有遇到过这种情况&#…

作者头像 李华
网站建设 2026/7/2 3:00:59

英雄联盟回放分析利器:ROFL播放器全方位使用手册

英雄联盟回放分析利器&#xff1a;ROFL播放器全方位使用手册 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为无法深入分析英雄联盟…

作者头像 李华
网站建设 2026/7/1 16:08:31

anything-llm能否生成PPT大纲?演示文稿辅助创作

Anything-LLM能否生成PPT大纲&#xff1f;演示文稿辅助创作 在企业汇报、产品路演或内部培训的场景中&#xff0c;一份逻辑清晰、重点突出的PPT往往决定了信息传递的效果。然而&#xff0c;从几十页的技术文档中提炼核心观点&#xff0c;再组织成有说服力的演示结构&#xff0…

作者头像 李华