基于C#的Socket通信聊天程序实战分享

socket通信聊天程序,计算机通信成品源码,聊天程序demo,C#编写,含服务器和客户端,使用socket通信,多线程,服务器可以支持多连接,多客户端登录,登录的客户端可以给在线的其它账号发送信息(数据),可一对一或一对多,客户端有断线重连功能。 项目使用VS2017导入项目,共一千多行代码,可直接运行。

在计算机通信的世界里,Socket 是一种强大的工具,今天就来跟大家分享一个用 C# 编写的 Socket 通信聊天程序。这个程序不仅有完整的服务器和客户端代码,还支持多线程、多连接等实用功能。

整体架构概述

这个聊天程序分为服务器端和客户端两大部分。服务器端要支持多个客户端同时登录连接,并且能处理不同客户端之间一对一或一对多的消息发送。客户端则具备断线重连的贴心功能,确保通信的稳定性。

服务器端实现

关键代码片段

using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; class Server { private TcpListener listener; private List<TcpClient> clients = new List<TcpClient>(); private Thread listenThread; public Server(int port) { listener = new TcpListener(IPAddress.Any, port); listenThread = new Thread(ListenForClients); listenThread.Start(); } private void ListenForClients() { listener.Start(); while (true) { TcpClient client = listener.AcceptTcpClient(); lock (clients) { clients.Add(client); } Thread clientThread = new Thread(HandleClientComm); clientThread.Start(client); } } private void HandleClientComm(object clientObject) { TcpClient client = (TcpClient)clientObject; NetworkStream stream = client.GetStream(); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = stream.Read(buffer, 0, buffer.Length))!= 0) { string message = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine($"Received: {message}"); // 处理接收到的消息,这里可以做消息分发等逻辑 // 例如,判断消息格式,根据格式决定是一对一还是一对多发送 lock (clients) { foreach (TcpClient c in clients) { if (c!= client) { NetworkStream clientStream = c.GetStream(); clientStream.Write(buffer, 0, bytesRead); } } } } stream.Close(); client.Close(); lock (clients) { clients.Remove(client); } } }

代码分析

  1. 初始化部分Server类的构造函数中,初始化了TcpListener并开启一个线程listenThread用于监听客户端连接。TcpListener绑定到本地任意 IP 地址和指定端口。
  2. 监听客户端连接ListenForClients方法中,listener.Start()开始监听,然后通过listener.AcceptTcpClient()等待客户端连接。一旦有客户端连接,将其加入clients列表,并开启一个新线程HandleClientComm专门处理该客户端的通信。
  3. 处理客户端通信HandleClientComm方法中,从客户端连接获取NetworkStream用于读写数据。通过stream.Read读取客户端发送的数据,然后简单地将数据广播给其他所有客户端(实际应用中可以根据消息格式实现一对一或一对多发送逻辑)。最后,当客户端断开连接时,关闭流和客户端连接,并从clients列表中移除。

客户端实现

关键代码片段

using System; using System.Net.Sockets; using System.Text; using System.Threading; class Client { private TcpClient client; private NetworkStream stream; private Thread receiveThread; private string serverIp; private int serverPort; public Client(string ip, int port) { serverIp = ip; serverPort = port; Connect(); } private void Connect() { while (true) { try { client = new TcpClient(serverIp, serverPort); stream = client.GetStream(); receiveThread = new Thread(ReceiveMessages); receiveThread.Start(); break; } catch (Exception ex) { Console.WriteLine($"Connection failed: {ex.Message}. Retrying in 5 seconds..."); Thread.Sleep(5000); } } } private void ReceiveMessages() { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = stream.Read(buffer, 0, buffer.Length))!= 0) { string message = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine($"Received: {message}"); } stream.Close(); client.Close(); Connect(); } public void SendMessage(string message) { if (client.Connected) { byte[] buffer = Encoding.UTF8.GetBytes(message); stream.Write(buffer, 0, buffer.Length); } else { Console.WriteLine("Not connected. Cannot send message."); } } }

代码分析

  1. 初始化与连接Client类构造函数接收服务器 IP 和端口,然后调用Connect方法尝试连接服务器。在Connect方法中,使用try - catch块处理连接失败的情况,如果连接失败,会提示错误信息并在 5 秒后重试,直到连接成功。连接成功后开启一个线程receiveThread用于接收服务器发送的消息。
  2. 接收消息ReceiveMessages方法从NetworkStream中读取数据,将其转换为字符串并输出到控制台。当读取到流结束(即服务器关闭连接)时,关闭流和客户端连接,并重新调用Connect方法尝试重连。
  3. 发送消息SendMessage方法首先检查客户端是否已连接,若已连接则将消息转换为字节数组并通过NetworkStream发送给服务器,否则提示未连接不能发送消息。

项目使用说明

这个项目使用 VS2017 导入即可,总共一千多行代码,导入后可直接运行。无论是想深入学习 Socket 通信原理,还是想在其基础上开发更复杂的聊天应用,这个项目都是一个不错的起点。

socket通信聊天程序,计算机通信成品源码,聊天程序demo,C#编写,含服务器和客户端,使用socket通信,多线程,服务器可以支持多连接,多客户端登录,登录的客户端可以给在线的其它账号发送信息(数据),可一对一或一对多,客户端有断线重连功能。 项目使用VS2017导入项目,共一千多行代码,可直接运行。

希望通过这篇博文,能让大家对基于 C# 的 Socket 通信聊天程序有更清晰的认识和理解,大家可以根据实际需求对代码进行扩展和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年评价高的动态人脸识别,人脸识别考勤,人脸识别系统厂家采购参考榜单 - 品牌鉴赏师

引言在科技飞速发展的当下,动态人脸识别、人脸识别考勤以及人脸识别系统在众多领域得到了广泛应用,其市场需求日益增长。为了帮助采购方在众多的人脸识别厂家中做出更优选择,我们依据相关测评数据和多方验证结果,为…

电机NVH分析之根原因查找与谐波计算工具探索

电机NVH分析&#xff0c;根原因查找。 定子,转子谐波次数与电磁力波次数对应关系表。 excel格式&#xff0c;输入极槽等参数可以自动计算。在电机领域&#xff0c;NVH&#xff08;Noise, Vibration, Harshness&#xff0c;噪声、振动与声振粗糙度&#xff09;分析至关重要&…

2026年可靠的抽屉式配电柜,配电柜,防爆配电柜厂家优质品牌推荐 - 品牌鉴赏师

引言在当今电力行业蓬勃发展的时代,配电柜作为电力系统中不可或缺的关键设备,其质量和性能直接关系到电力供应的稳定性与安全性。为了给广大用户提供一份客观、公正、全面的配电柜厂家推荐榜单,我们依据一系列科学的…

探索光伏蓄电池离网MATLAB仿真模型

光伏蓄电池离网MATLAB仿真模型 蓄电池具有储能作用(削峰填谷) 实现光伏和蓄电池的能量双向流动 维持输出电压稳定 该模型的原理说明文档 有boost结构的MPPT和BUCK型的MPPT&#xff0c;通常是boost型的mppt电路。在当今追求可持续能源的时代&#xff0c;光伏蓄电池离网系统凭借…

MATLAB 实现滚动轴承故障诊断:基于 VMD 的振动信号分析与峭度计算

MATLAB滚动轴承故障诊断:变分模态分解(VMD)分解振动信号&#xff0c;各个本征模态函数峭度的计算在滚动轴承故障诊断领域&#xff0c;准确提取故障特征是关键。变分模态分解&#xff08;VMD&#xff09;是一种强大的信号处理方法&#xff0c;它能将复杂的振动信号分解为多个本征…

VScode点击无法运行

2026年的第一篇,记录一下今天VScode无法打开的情况:点击无反应,没有任何提示,啥也没有,相当于没点。我还以为我电脑出了问题,重启了,依旧如此。点击后,打开任务管理器,vscode确实没有运行。 在网上找了一些方…

永磁同步电机(PMSM)矢量控制之旅:从理论到MATLAB仿真

永磁同步电机(PMSM)矢量控制&#xff0c;坐标变换到d-q轴后&#xff0c;采用SVPWM调制算法&#xff0c;进行速度电流双闭环控制&#xff0c;控制算法为PID&#xff0c;仿真结果如图所示。 (默认发MATLAB R2018b版本)永磁同步电机&#xff08;PMSM&#xff09;因其高效、功率密度…

FPGA实现延时链

FPGA实现延时链之前有做一个输出100ps左右的延时链,当时找到一篇国外的论文,2015年的文章了。链接:《High-Resolution_Synthesizable_Digitally-Controlled_Delay_Lines》,根据论文的内容,要使输出的延时能够更加…

探索基于 S7 - 200 的消防泵稳压控制系统程序

基于S7-200的消防泵稳压控制系统程序基于西门子S7-209的消防稳压控制系统程序。在消防领域&#xff0c;可靠的消防泵稳压控制系统至关重要。今天咱们就来深入聊聊基于西门子 S7 - 200 的消防稳压控制系统程序。首先得知道&#xff0c;这个系统的核心目标就是确保消防管网的压力…

图像金字塔与直方图

在计算机视觉领域&#xff0c;图像金字塔与直方图是两大基础且实用的技术。图像金字塔用于处理不同分辨率的图像&#xff0c;广泛应用于图像融合、超分辨率重建等场景&#xff1b;直方图则用于描述图像像素分布&#xff0c;是图像增强、阈值分割的核心工具。本文将结合完整代码…

2026年靠谱的电力箱变压器,干式箱变压器,地埋式箱变压器厂家专业评测推荐榜 - 品牌鉴赏师

引言在 2026 年的电力行业中,箱变压器作为电力传输与分配的关键设备,其性能与质量直接影响着电力系统的稳定运行。为了给广大用户提供专业、客观、公正的厂家推荐,我们依据国内相关行业协会公开的数据形成的指南,结…

APEX实战第9篇:手把手教你集成RAS轻松实现真正的数据安全

APEX实战第9篇:手把手教你集成RAS轻松实现真正的数据安全2026-01-19 21:46 AlfredZhao 阅读(0) 评论(0) 收藏 举报在 APEX 开发的江湖里,大家都有一个共同的痛点:权限控制代码满天飞。 为了实现“张三只能看张三…

2026年知名的门禁,门禁管理系统,智能门禁管理系统厂家选购参考榜 - 品牌鉴赏师

引言在当今数字化与智能化快速发展的时代,门禁及门禁管理系统已成为保障各类场所安全与高效运营的关键设施。无论是政府机关、商业综合体,还是住宅小区、医疗机构,都对门禁系统的安全性、稳定性和智能化程度提出了更…

django基于数据挖掘技术的台风灾害预测系统-计算机毕业设计源码+无LW文档

Django基于大数据旅游数据分析与推荐系统的设计与实现 摘要 本文阐述了一个基于Django框架&#xff0c;结合大数据技术的旅游数据分析与推荐系统的设计与实现过程。该系统旨在利用大数据分析技术深入挖掘旅游数据&#xff0c;为游客提供精准的旅游推荐和全面的旅游资讯&#xf…

Git 实战高频命令全解析(覆盖99%开发场景)

Git 实战高频命令全解析(覆盖99%开发场景) Git 作为代码版本控制的核心工具,命令看似繁杂,但日常开发中 99% 的场景仅需掌握 20+ 高频命令即可应对。本文整合实战必备命令,按功能模块分类,结合使用场景、核心用法…

2026年广州口碑好的小红书笔记优化,小红书效果运营,小红书区域代理公司优质推荐 - 品牌鉴赏师

2026 年广州口碑好的小红书效果运营及区域代理公司优质推荐在当今数字化营销的浪潮中,小红书作为一个极具影响力的社交电商平台,吸引了众多企业和品牌的关注。为了帮助大家在广州地区挑选到优质的小红书效果运营及区…

AI结对测试:人类与机器协作的新范式

第一章 范式转移&#xff1a;从自动化测试到人机共生 1.1 传统测试的瓶颈与AI的破局 数据佐证&#xff1a;2025年ISTQB行业报告显示&#xff0c;73%企业面临测试用例爆炸性增长&#xff08;年均增幅300%&#xff09; 典型案例&#xff1a;某金融系统回归测试中&#xff0c;AI…

SSRF(Server-Side Request Forgery:服务器端请求伪造) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

痞子衡嵌入式:如果你在找针对i.MX RT系列的OTA参考设计,可以持续关注Tiny OTA

Tiny OTA 是一个针对 i.MX RT 系列的 OTA 参考设计,其包含 MCU 端固件(tota_sbl 和 tota_app)和 PC 端 GUI 工具(MCU-TinyOtaUtility)两部分。tota_sbl 是示例 bootloader 程序,其由 MCU ROM 引导启动,该程序负…