博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 异步TCP Socket聊天室(1服务器,N客户端)
阅读量:6850 次
发布时间:2019-06-26

本文共 2500 字,大约阅读时间需要 8 分钟。

该例子是一个异步TCP Socket聊天室!

1个服务器

N个客户端

下载下来后,直接将本机的IP改为192.168.1.224即可直接运行程序,或者自行改下程序源码中指定的IP地址即可

----------------------------

该文章是访问突破万次的文章,因为是我前一段时间在CSDN上面发的!现在没用CSDN博客了,因为转阵营到CNBLOGS了~所以原文地址我就不贴出来了。

都是我本人原创的!

希望有不好的地方 提出来,感激不尽~~

好了,不罗嗦啦。 上图先:

 

服务器+客户端代码大概有800来行,下面贴出一部分代码。

下面我会贴出下载地址的!

先贴代码(部分)吧:

///   /// 异步发送message给user  ///   ///   ///  private void AsyncSendToClient(User user, string message)  {      SendToClientDelegate d = new SendToClientDelegate(SendToClient);      IAsyncResult result = d.BeginInvoke(user, message, null, null);  while (result.IsCompleted == false)      {  if (isExit)  break;          Thread.Sleep(250);      }      d.EndInvoke(result);  }  private delegate void SendToClientDelegate(User user, string message);  ///   /// 发送message给user  ///   ///   ///  private void SendToClient(User user, string message)  {  try      {  //将字符串写入网络流,此方法会自动附加字符串长度前缀          user.bw.Write(message);          user.bw.Flush();          AddItemToListBox(string.Format("向[{0}]发送:{1}", user.userName, message));      }  catch      {          AddItemToListBox(string.Format("向[{0}]发送信息失败", user.userName));      }  }  ///   /// 移除用户  ///   ///  private void RemoveUser(User user)  {      userList.Remove(user);      user.Close();      AddItemToListBox(string.Format("当前连接用户数:{0}", userList.Count));  }  delegate void ReceiveMessageDelegate(User user, out string receiveMessage);  ///   /// 接收客户端发来的信息  ///   ///   ///  private void ReceiveMessage(User user, out string receiveMessage)  {  try      {          receiveMessage = user.br.ReadString();      }  catch (Exception ex)      {          AddItemToListBox(ex.Message);          receiveMessage = null;      }  }  private delegate void ListenClientDelegate(out TcpClient client);  ///   /// 接受挂起的客户端连接请求  ///   ///  private void ListenClient(out TcpClient newClient)  {  try      {          newClient = myListener.AcceptTcpClient();      }  catch      {          newClient = null;      }  }  delegate void AddItemToListBoxDelegate(string str);  ///   /// 在ListBox中追加状态信息  ///   /// 要追加的信息 private void AddItemToListBox(string str)  {  if (lst_Status.InvokeRequired)      {          AddItemToListBoxDelegate d = AddItemToListBox;          lst_Status.Invoke(d, str);      }  else      {          lst_Status.Items.Add(str);          lst_Status.SelectedIndex = lst_Status.Items.Count - 1;          lst_Status.ClearSelected();      }  }

完整代码包下载地址(包含客户端和服务器):

参考:

转载于:https://www.cnblogs.com/andrew-blog/archive/2011/12/03/CSharp_Async_Tcp.html

你可能感兴趣的文章
【WEB前端系列之CSS】CSS3动画之Transform
查看>>
JQuery的一些基础知识
查看>>
bzoj3289Mato的文件管理
查看>>
bzoj1664[Usaco2006 Open]County Fair Events 参加节日庆祝*
查看>>
bzoj3732Network
查看>>
docker 使用mysql
查看>>
jquery实现简单轮播图
查看>>
Maven的简介
查看>>
Ubuntu14.04虚拟机下基本操作(typical安装)
查看>>
第一篇原创(工作一年后的纠结辞职战斗)
查看>>
javascript 重难点(原型链 this) 理解总有一个过程,不要急,循序渐进!
查看>>
background-image 和 img
查看>>
Spring 启动加载资源到内存
查看>>
Python菜鸟之路:Python基础-逼格提升利器:装饰器Decorator
查看>>
NSRunLoop
查看>>
mysql存储引擎(mysql学习六)
查看>>
千万短信发送量的架构设计
查看>>
关于python学习的各方面感想
查看>>
Android通讯录数据库操作
查看>>
使用Java+Kotlin双语言的LeetCode刷题之路(二)
查看>>