C#如何使用Socket实现本地多人聊天室
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍C#如何使用Socket实现本地多人聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!【脚本一:Server端】使用本机地址:127.0.0.1完整代码usi
千家信息网最后更新 2026年11月02日C#如何使用Socket实现本地多人聊天室
这篇文章主要介绍C#如何使用Socket实现本地多人聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
【脚本一:Server端】
使用本机地址:127.0.0.1
完整代码
using System;using System.Collections.Generic;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading; namespace ConsoleApp1{ public class Server { Socket mySocket = null; Dictionary cliDic = new Dictionary(); public void Connect(int port) { string IP = "127.0.0.1"; //IPAddress IPAddress = IPAddress.Parse("127.0.0.1"); IPAddress address = IPAddress.Any; //创建IP终结点,把IP地址与端口绑定到网络终结点上 IPEndPoint endPoint = new IPEndPoint(address, port); //创建客户端套接字 mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ///监听套接字终结点 mySocket.Bind(endPoint); //服务端可接收客户端连接数量为无限个 mySocket.Listen(0); //开启线程监听客户端 Thread myThread = new Thread(Listen_Con); myThread.Start(); Console.WriteLine("开始监听..."); } /// /// 接收连接的客户端并存储客户端的信息 /// /// public void Listen_Con(Object obj) { Socket cliSocket = null; //持续监听客户端的请求 while (true) { try { cliSocket = mySocket.Accept(); } catch (Exception e) { Console.WriteLine(e.Message); } string cliEndPoint = cliSocket.RemoteEndPoint.ToString(); IPAddress cliAddress = (cliSocket.RemoteEndPoint as IPEndPoint).Address; int cliPort = (cliSocket.RemoteEndPoint as IPEndPoint).Port; cliDic.Add(cliAddress, cliSocket); string MsgStr = "[客户端结点:" + cliEndPoint + "\n+客户端IP:" + cliAddress.ToString() + "\n客户端端口:" + cliPort.ToString() + "\n已连接]"; byte[] MsgBytes = Encoding.UTF8.GetBytes(MsgStr); cliSocket.Send(MsgBytes); Thread rec_Cli = new Thread(Receive_Con); rec_Cli.Start(cliSocket); Thread sed_Cli = new Thread(SendToCli); sed_Cli.Start(cliSocket); } } /// /// 接收已连接的客户端发送的消息 /// /// public void Receive_Con(Object socket) { Socket client = socket as Socket; while (true) { //创建大小为1024*1024的内存缓冲区(1M) byte[] recBytes = new byte[1024 * 1024]; //尝试把接收的字节存储到缓冲区 try { int length = client.Receive(recBytes); //把机器接收的字节数组转换为string string recMsg = Encoding.UTF8.GetString(recBytes, 0, length); //将服务器接收到的信息转发到所有已连接的客户端 if (cliDic.Count > 0) { foreach (var soc in cliDic) { soc.Value.Send(Encoding.UTF8.GetBytes("[" + soc.Value.RemoteEndPoint + "]:" + recMsg)); } } Console.WriteLine("[" + client.RemoteEndPoint + "]:" + recMsg); } catch (Exception) { cliDic.Remove((client.RemoteEndPoint as IPEndPoint).Address); //客户端断开的异常 Console.WriteLine("[客户端" + (client.RemoteEndPoint as IPEndPoint).Address + "已断开]"); Console.WriteLine("[客户端终结点:" + client.RemoteEndPoint+"]"); //断开套接字 client.Close(); break; } } } public void SendToCli(object obj) { Socket curCliSoc = obj as Socket; while (true) { byte[] ByteToAll = new byte[1024 * 1024]; try { string MsgToAll = Console.ReadLine(); ByteToAll = Encoding.UTF8.GetBytes("[服务端]:"+MsgToAll); curCliSoc.Send(ByteToAll); } catch(Exception) { Console.WriteLine("ERROR:" + curCliSoc.RemoteEndPoint + "已与服务端断开!"); curCliSoc.Close(); if(cliDic.ContainsKey((curCliSoc.RemoteEndPoint as IPEndPoint).Address)) { cliDic.Remove((curCliSoc.RemoteEndPoint as IPEndPoint).Address); } } } } } public class ServerMain { static void Main(string[] args) { Server s1 = new Server(); s1.Connect(8800); } }} Server端运行结果:
【脚本二:Client端】
完整代码
using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading; namespace ConsoleApp1{ public class Client { string SerIP = "127.0.0.1"; Socket myClient = null; Thread ConnectThread = null; IPAddress SerAdd; IPEndPoint SerEP; public void Connect_To_Ser(int port) { myClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); SerAdd = IPAddress.Parse(SerIP); SerEP = new IPEndPoint(SerAdd, port); while (true) { try { myClient.Connect(SerEP); break; } catch { Console.WriteLine("无法连接到服务端,请重试..."); } } ConnectThread = new Thread(Receive_Ser); ConnectThread.Start(); } public void Receive_Ser() { while (true) { byte[] SerBytes = new byte[1024 * 1024]; try { int length = myClient.Receive(SerBytes); string Msg = Encoding.UTF8.GetString(SerBytes, 0, length); Console.WriteLine(Msg); } catch (Exception) { Console.WriteLine("已与服务端断开连接..."); break; } } } public void SendToSer() { while (true) { try { string SendMsg = Console.ReadLine(); myClient.Send(Encoding.UTF8.GetBytes(SendMsg)); } catch (Exception) { Console.WriteLine("[SendToSer]已断开连接"); break; } } } } public class ClienMain { static void Main(string[] Args) { Client c1 = new Client(); c1.Connect_To_Ser(8800); c1.SendToSer(); } }}客户端运行效果:
①客户端先于服务端运行
②客户端迟于服务端运行
暂时总效果:
以上是"C#如何使用Socket实现本地多人聊天室"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
客户
客户端
服务
终结点
监听
运行
套接字
多人
聊天室
C#
代码
信息
内容
地址
字节
效果
端口
端的
篇文章
缓冲区
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司
网络科技有限互联网
嘟嘟瓜互联网科技
顺玮阁互联网科技
滨湖区互联网智能科技产品供应
玖二柒互联网科技公司待遇
创业天下互联网科技有限公司
江阴互联网智能科技产品进口
广州新华互联网科技学校电竞方面
企晟互联网信息科技有限公司
科技大学互联网
为客找房互联网科技公司怎么样
国大互联网教育科技有限公司薪资
产业互联网科技服务公司
富国互联网金融科技混合基金
互联网与数字科技关系
全球科技与互联网公司市值变化
同城互联网络科技
中国互联网公司的科技投入
科技信息时代互联网发展
广东万易互联网科技有限公司惠州分公司
涨乐互联网科技
港股互联网科技股
互联网女皇 腾讯科技
安控科技rtu产品工业互联网
杭州壁岐互联网科技有限公司
东莞新华互联网科技学校
互联网方面的科技前沿
互联网风格科技公司名称
互联网的科技体现在哪里