C#基于Socket实现多人聊天功能_第1页
C#基于Socket实现多人聊天功能_第2页
C#基于Socket实现多人聊天功能_第3页
C#基于Socket实现多人聊天功能_第4页
C#基于Socket实现多人聊天功能_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论