C#中怎么用websocket实现简易聊天功能
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"C#中怎么用websocket实现简易聊天功能",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#中怎么用websocket实现简易聊天功
千家信息网最后更新 2026年11月02日C#中怎么用websocket实现简易聊天功能
本篇内容主要讲解"C#中怎么用websocket实现简易聊天功能",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#中怎么用websocket实现简易聊天功能"吧!
前言
使用C#语言进行开发,基于.NET FrameWork4
功能包含群聊,和私聊
界面
界面设计代码
namespace chat_server{ partial class Form1 { /// /// 必需的设计器变量。 /// private System.ComponentModel.IContainer components = null; /// /// 清理所有正在使用的资源。 /// /// 如果应释放托管资源,为 true;否则为 false。 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// /// 设计器支持所需的方法 - 不要修改 /// 使用代码编辑器修改此方法的内容。 /// private void InitializeComponent() { this.textBoxIP = new System.Windows.Forms.TextBox(); this.labelIP = new System.Windows.Forms.Label(); this.labelPort = new System.Windows.Forms.Label(); this.textBoxPort = new System.Windows.Forms.TextBox(); this.buttonStart = new System.Windows.Forms.Button(); this.textBoxLog = new System.Windows.Forms.TextBox(); this.textBoxMsg = new System.Windows.Forms.TextBox(); this.buttonSend = new System.Windows.Forms.Button(); this.SuspendLayout(); // // textBoxIP // this.textBoxIP.Location = new System.Drawing.Point(145, 25); this.textBoxIP.Name = "textBoxIP"; this.textBoxIP.Size = new System.Drawing.Size(100, 25); this.textBoxIP.TabIndex = 0; this.textBoxIP.Text = "127.0.0.1"; // // labelIP // this.labelIP.AutoSize = true; this.labelIP.Location = new System.Drawing.Point(90, 28); this.labelIP.Name = "labelIP"; this.labelIP.Size = new System.Drawing.Size(31, 15); this.labelIP.TabIndex = 1; this.labelIP.Text = "IP:"; // // labelPort // this.labelPort.AutoSize = true; this.labelPort.Location = new System.Drawing.Point(371, 28); this.labelPort.Name = "labelPort"; this.labelPort.Size = new System.Drawing.Size(54, 15); this.labelPort.TabIndex = 3; this.labelPort.Text = "port:"; // // textBoxPort // this.textBoxPort.Location = new System.Drawing.Point(452, 25); this.textBoxPort.Name = "textBoxPort"; this.textBoxPort.Size = new System.Drawing.Size(100, 25); this.textBoxPort.TabIndex = 2; this.textBoxPort.Text = "6666"; // // buttonStart // this.buttonStart.Location = new System.Drawing.Point(718, 13); this.buttonStart.Name = "buttonStart"; this.buttonStart.Size = new System.Drawing.Size(142, 45); this.buttonStart.TabIndex = 4; this.buttonStart.Text = "开启服务"; this.buttonStart.UseVisualStyleBackColor = true; this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); // // textBoxLog // this.textBoxLog.Location = new System.Drawing.Point(28, 73); this.textBoxLog.Multiline = true; this.textBoxLog.Name = "textBoxLog"; this.textBoxLog.Size = new System.Drawing.Size(832, 406); this.textBoxLog.TabIndex = 5; // // textBoxMsg // this.textBoxMsg.Location = new System.Drawing.Point(28, 499); this.textBoxMsg.Name = "textBoxMsg"; this.textBoxMsg.Size = new System.Drawing.Size(653, 25); this.textBoxMsg.TabIndex = 6; // // buttonSend // this.buttonSend.Location = new System.Drawing.Point(761, 499); this.buttonSend.Name = "buttonSend"; this.buttonSend.Size = new System.Drawing.Size(99, 43); this.buttonSend.TabIndex = 7; this.buttonSend.Text = "发送"; this.buttonSend.UseVisualStyleBackColor = true; this.buttonSend.Click += new System.EventHandler(this.buttonSend_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(947, 567); this.Controls.Add(this.buttonSend); this.Controls.Add(this.textBoxMsg); this.Controls.Add(this.textBoxLog); this.Controls.Add(this.buttonStart); this.Controls.Add(this.labelPort); this.Controls.Add(this.textBoxPort); this.Controls.Add(this.labelIP); this.Controls.Add(this.textBoxIP); this.Name = "Form1"; this.Text = "服务器"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.TextBox textBoxIP; private System.Windows.Forms.Label labelIP; private System.Windows.Forms.Label labelPort; private System.Windows.Forms.TextBox textBoxPort; private System.Windows.Forms.Button buttonStart; private System.Windows.Forms.TextBox textBoxLog; private System.Windows.Forms.TextBox textBoxMsg; private System.Windows.Forms.Button buttonSend; }}源代码
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Windows.Forms;namespace chat_server{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } // socket连接容器 Dictionary userContain = new Dictionary(); private void buttonStart_Click(object sender, EventArgs e) { try { //1、创建socket Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //2、绑定ip和端口 String ip = textBoxIP.Text; int port = Convert.ToInt32(textBoxPort.Text); socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port)); //3、开启监听 socket.Listen(10);//等待连接队列的最大值 //4、开始接受客户端的链接 ThreadPool.QueueUserWorkItem(new WaitCallback(connect), socket); } catch { MessageBox.Show("启动服务器失败"); } } private void connect(object socket) { var serverSockert = socket as Socket;//强制转换 showLog("服务器正常启动,开始接受客户端的数据"); byte[] data = new byte[1024]; int len; String name; //客户端的用户名 while (true) { try { var proxSocket = serverSockert.Accept();//接受连接 len = proxSocket.Receive(data, 0, data.Length, SocketFlags.None);//接受客户端的用户名 name = Encoding.Default.GetString(data, 0, len); showLog(String.Format("客户端 {0} 用户名 {1} 连接服务器", proxSocket.RemoteEndPoint.ToString(),name)); String msg = String.Format("用户{0}上线了", name); sendMsg(msg); userContain[proxSocket] = name;//把对象放入集合中 //不停的接受当前链接的客户端发送的消息 ThreadPool.QueueUserWorkItem(new WaitCallback(this.recevie), proxSocket); } catch { MessageBox.Show("接受异常"); break; } } } private void recevie(object socket) { var proxSocket = socket as Socket; byte[] data = new byte[1024 * 1024];//接受,发送数据缓冲区 String msg; int len = 0; // 数据长度 String name = userContain[proxSocket]; // 客户端名字 while (true) { try { len = proxSocket.Receive(data, 0, data.Length, SocketFlags.None); } catch { msg = String.Format("客户端{0}异常退出", proxSocket.RemoteEndPoint.ToString()); showLog(msg); msg = String.Format("用户{0}下线了", name); sendMsg(msg); userContain.Remove(proxSocket); stopConnect(proxSocket); return; } if (len <= 0) { //客户端正常退出 msg = String.Format("客户端{0}正常退出", proxSocket.RemoteEndPoint.ToString()); showLog(msg); msg = String.Format("用户{0}下线了", name); sendMsg(msg); userContain.Remove(proxSocket); stopConnect(proxSocket); return;//结束当前接受客户端数据的异步线程 } //接受消息 msg = Encoding.Default.GetString(data, 0, len); //私聊信息格式@name:msg //name 为用户名 msg 为消息 bool flag = true; if (msg.StartsWith("@")) { int index = msg.IndexOf(":"); String targetName = msg.Substring(1, index-1); msg = msg.Substring(index + 1); foreach(var user in userContain) { if(targetName.Equals(user.Value)&&user.Key.Connected) { msg = String.Format("用户{0} 单独对你说:{1}",name,msg); data = Encoding.Default.GetBytes(msg); user.Key.Send(data, 0, data.Length, SocketFlags.None); flag = false; break; } } } if (flag) { msg = String.Format("用户{0}:{1}", name, msg); sendMsg(msg); } } } private void stopConnect(Socket socket) { try { if (socket.Connected) { socket.Shutdown(SocketShutdown.Both); socket.Close(100); } } catch { } } private void showLog(String msg) { if (textBoxLog.InvokeRequired) { //如果是跨线程访问 textBoxLog.Invoke(new Action( s => { this.textBoxLog.Text += msg+"\r\n"; }),msg); } else { this.textBoxLog.Text += msg; } } private void buttonSend_Click(object sender, EventArgs e) { //发送消息 String msg = String.Format("服务器发布通知信息{0}", textBoxMsg.Text); sendMsg(msg); } private void sendMsg(String msg) { byte[] data = new byte[1024 * 1024]; data = Encoding.Default.GetBytes(msg); foreach (var user in userContain) { if (user.Key.Connected) { user.Key.Send(data, 0, data.Length, SocketFlags.None); } } } }} 到此,相信大家对"C#中怎么用websocket实现简易聊天功能"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
客户
用户
客户端
服务
服务器
功能
C#
数据
消息
用户名
端的
设计
简易
代码
内容
下线
信息
方法
界面
线程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网是第几次科技革命的成果
广州紫鲸互联网科技有限公司
金融科技创新监管互联网金融
合肥互联网科技公司
成都互联网科技公司
鑫亿盛互联网科技
银优互联网科技有限公司
大白互联网科技
成都玖崟互联网科技有限公司乐商圈怎么样
团飞科技与伯堂互联网服务平台
彤创互联网科技有限公司
互联网科技产业特征
为客找房互联网科技公司怎么样
合肥互联网科技公司公章图片
广东工业互联网大赛深圳学泰科技
厦门江牛科技互联网
版纳互联网科技选哪家
保山浩联互联网科技有限公司
互联网高科技绘画
科技美学互联网 艺术
金融科技创新监管互联网金融
杭州互联网科技公司
北京禾田雨橡互联网科技
多迪互联网科技有限公司
富国互联网科技创新基金
北京大学互联网科技怎么样
互联网科技寓意
广州市恰铎互联网科技有限公司
互联网科技大奖都有哪些公司
吉林省码上互联网科技电话