版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#基于Socket实现多人聊天功能本文实例为大家分享了C#基于Socket实现多人聊天功能的具体代码,供大家参考,具体内容如下
服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。
代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.Threading;
namespaceChatRoomService
classService
{
SocketsocketSevice;
ListSocketuserList;//用户组
publicService()
{
socketSevice=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
userList=newListSocket
}
publicvoid
Start()
{
socketSevice.Bind(newIPEndPoint(IPAddress.Any,5566));
socketSevice.Listen(10);
Console.WriteLine("服务器启动成功");
//开启接受连接,用多线程
ThreadaccThread=newThread(Accept);
accThread.IsBackground=true;
accThread.Start();
}
privatevoidAccept()
{
//接受连接
SocketclientSocket=socketSevice.Accept();
userList.Add(clientSocket);
//打印已经连接IP地址
Console.WriteLine(IPToAddress(clientSocket)+"连接进来了");
//
ThreadRecvThread=newThread(ReceMessage);
RecvThread.IsBackground=true;
RecvThread.Start(clientSocket);
Accept();//递归
}
//接收客户端信息
privatevoidReceMessage(Objectobj)
{
Socketclient=objasSocket;
byte[]strByte=newbyte[1024*1024];//设定接受字符的长度
stringstr="";
try
{
intlen=client.Receive(strByte);//接受用户发送的内容
str=Encoding.Default.GetString(strByte,0,len);
Broadcast(str,client);//广播给用户
Console.WriteLine(str);
}
catch(Exceptione)
{
Console.WriteLine(IPToAddress(client)+"退出");
userList.Remove(client);
Thread.CurrentThread.Abort();//退出时掐死线程,不然递归反弹
}
ReceMessage(client);//使用递归
}
///summary
///广播信息
////summary
///paramname="useStr"传入收到的传输的内容/param
///paramname="obj"传送信息的客户/param
privatevoidBroadcast(stringuserStr,objectobj)
{
SocketclientSend=objasSocket;//当前发送信息的客户
foreach(SocketclientinuserList)
{
if(client!=clientSend)//将信息广播给其他用户
{
client.Send(Encoding.Default.GetBytes(IPToAddress(clientSend)+":"+userStr));
}
}
}
//转换出连来客户的IP地址
privatestringIPToAddress(Socketsoket)
{
return(soket.RemoteEndPointasIPEndPoint).Address.ToString();
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceChatRoomService
classProgram
{
staticvoidMain(string[]args)
{
Servicess=newService();
ss.Start();
Console.ReadLine();
}
}
}
客户端的功能开始十分简单,可以发送信息给服务器。也可以接收服务器转发过来其他客户端的信息。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.Threading;
usingSystem.Threading.Tasks;
namespaceChatRoom
classClientRoom
{
SocketclientSocket;
publicClientRoom()
{
clientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//初始化服务器
}
///summary
///连接服务器
////summary
///paramname="Ip"/param
///paramname="port"/param
publicvoidConnected(stringIp,intport)
{
clientSocket.Connect(Ip,port);
Console.WriteLine("连接成功");
//ClientSocket.Bind(newIPEndPoint());
ThreadRecvThread=newThread(RecvMessage);
RecvThread.IsBackground=true;
RecvThread.Start();
}
publicvoidSend(Stringstr)
{
clientSocket.Send(Encoding.Default.GetBytes(str));
}
///summary
///接受信息
////summary
privatevoidRecvMessage()
{
try
{
byte[]strByte=newbyte[500*1024];
intlen=clientSocket.Receive(strByte);
Console.WriteLine(Encoding.Default.GetString(strByte,0,len));
}
catch(Exceptione)//服务器关闭
{
Console.WriteLine("服务器关闭");
Thread.CurrentThread.Abort();//关闭时切断进程
}
RecvMessage();
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceChatRoom
classProgram
{
staticvoidMain(string[]args)
{
ClientRoomclient=newClientRoom();
client.Connected("",5566);
stringstr=Console.ReadLine();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 伊克昭盟达拉特旗2025-2026学年第二学期六年级语文第四单元测试卷(部编版含答案)
- 茂名市茂港区2025-2026学年第二学期四年级语文第五单元测试卷(部编版含答案)
- 永州市祁阳县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 毕节地区金沙县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 德阳市中江县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 服装公司营销策划方案
- 深度解析(2026)《AQ 5203-2008电镀生产装置安全技术条件》
- 代数考试陷阱题及答案
- 《高考快车道》专题1 信息类文本阅读(课后习题)(学生版)(有答案)高三 二轮专题复习讲义 语文
- 市场调研与预测专业知识与实践技能试题及答案
- 2026年电子信息工程专业信号与系统真题单套试卷
- DB36T+2220-2026饮用水水源蓝藻水华应急防控技术指南
- 2026年员工体检组织计划
- 5.1 人民代表大会制度 课件(内嵌视频)-2025-2026学年统编版道德与法治八年级下册
- 2026江西省江盐集团盐品事业部招聘24人笔试参考题库及答案解析
- 2026年危险废物经营许可证管理办法题库及答案
- 安全管理人员考勤制度
- 运维技术人员考核制度
- 起重安全生产管理制度
- (完整版)泵站工程监理实施细则
- 模具钳工技能培训
评论
0/150
提交评论