news 2026/5/10 19:02:06

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/5/9 11:29:30

KeyPass密码管理器完整实战指南:3步构建个人安全堡垒

KeyPass密码管理器完整实战指南&#xff1a;3步构建个人安全堡垒 【免费下载链接】KeyPass KeyPass: Open-source & offline password manager. Store, manage, take control securely. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyPass 在数字身份日益重要的今…

作者头像 李华
网站建设 2026/5/9 15:27:10

GPT-SoVITS模型管理全攻略:从新手到专家的Checkpoint实战指南

GPT-SoVITS模型管理全攻略&#xff1a;从新手到专家的Checkpoint实战指南 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 在语音合成技术快速发展的今天&#xff0c;GPT-SoVITS作为开源语音合成项目&#xff0c;其模型管理…

作者头像 李华
网站建设 2026/5/9 12:12:29

运动健身计划定制:根据目标生成训练与饮食方案

运动健身计划定制&#xff1a;基于AI的个性化训练与饮食方案生成 在健身房里&#xff0c;你是否曾面对琳琅满目的训练动作和五花八门的饮食建议感到无所适从&#xff1f;即便请了私教&#xff0c;制定的计划也可能只是“模板套用”&#xff0c;难以真正贴合你的身体状态、作息节…

作者头像 李华
网站建设 2026/5/10 3:28:56

解密ET-BERT:5步掌握加密流量分类的Transformer核心技术

在网络安全日益重要的今天&#xff0c;ET-BERT作为首个专门针对加密流量设计的Transformer模型&#xff0c;为网络流量分类带来了革命性的突破。该项目基于PyTorch框架开发&#xff0c;采用创新的Burst数据转换机制&#xff0c;能够在完全加密的环境下实现高精度流量识别&#…

作者头像 李华
网站建设 2026/5/10 9:14:11

anything-llm能否实现动态权限?基于上下文的访问控制

anything-llm能否实现动态权限&#xff1f;基于上下文的访问控制 在企业知识库系统日益智能化的今天&#xff0c;一个看似简单的问题背后&#xff0c;往往藏着复杂的权限逻辑&#xff1a; “上季度的销售数据是多少&#xff1f;”——这个问题本身并无敏感之处&#xff0c;但如…

作者头像 李华
网站建设 2026/5/9 10:00:43

VRCT终极指南:如何用AI翻译在VRChat中打破语言障碍

VRCT终极指南&#xff1a;如何用AI翻译在VRChat中打破语言障碍 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 你是否曾经在VRChat的国际房间中&#xff0c;因为语言不通而错失精彩的对…

作者头像 李华