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

1个服务器

N个客户端

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

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

希望路过的朋友,前辈,不要踩我的文章,有不好的地方希望指出,感激不尽!!

刚在CSDN写博客不久,发现文章老是踩几十下、顶几下。。 分都没有了。。。。- -。

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

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

服务器+客户端代码大概有800来行,下面贴出一部分代码。需要完整的请留下Email , 我会直接发给您的。

或者直接去csdn下载,下面我会贴出下载地址的!先贴代码吧:

        /// <summary>/// 异步发送message给user/// </summary>/// <param name="user"></param>/// <param name="message"></param>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);/// <summary>/// 发送message给user/// </summary>/// <param name="user"></param>/// <param name="message"></param>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));}}/// <summary>/// 移除用户/// </summary>/// <param name="user"></param>private void RemoveUser(User user){userList.Remove(user);user.Close();AddItemToListBox(string.Format("当前连接用户数:{0}", userList.Count));}delegate void ReceiveMessageDelegate(User user, out string receiveMessage);/// <summary>/// 接收客户端发来的信息/// </summary>/// <param name="user"></param>/// <param name="receiveMessage"></param>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);/// <summary>/// 接受挂起的客户端连接请求/// </summary>/// <param name="newClient"></param>private void ListenClient(out TcpClient newClient){try{newClient = myListener.AcceptTcpClient();}catch{newClient = null;}}delegate void AddItemToListBoxDelegate(string str);/// <summary>/// 在ListBox中追加状态信息/// </summary>/// <param name="str">要追加的信息</param>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();}}

完整代码包下载地址(包含客户端和服务器):http://download.csdn.net/source/3502184

作者:Andrew_wx 发表于2011-8-8 2:30:43 原文链接
阅读:8884 评论:269 查看评论

转载于:https://www.cnblogs.com/guoyiqi/archive/2011/08/07/2139168.html

C# 异步TCP Socket聊天室(1服务器,N客户端)相关推荐

  1. 回调函数 线程_从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2...

    根据 <0 基于socket和pthread实现多线程服务器模型>所述,server创建子线程的时候用的是以下代码: pconnsocke = (int *) malloc(sizeof( ...

  2. C#+Socket 聊天室(实现公网通信 客户端-服务器端-客户端)

    文章目录 简述 功能演示视频(b站) 准备工作 服务器端 服务器端界面 服务器端代码 客户端 客户端界面 客户端代码 总结 简述 关于Socket的原理我就不在这里赘述了,有大佬已经作详细的说明了: ...

  3. Linux socket聊天室

    目录 一.运行效果 1.分别编译客户端和服务端代码 2.运行 3.使用效果 二.代码 chat.h 服务端代码 客户端代码 一.运行效果 1.分别编译客户端和服务端代码 gcc client.c -o ...

  4. 从0实现基于Linux socket聊天室-实现聊天室的公聊、私聊功能-4

    前面文章链接如下: <从0实现基于Linux socket聊天室-多线程服务器模型-1> <从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2> &l ...

  5. 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》

    基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...

  6. java nio.2群发_JAVA NIO TCP SOCKET 聊天群发

    以前都是用一般的socket编程,用线程来控制.最近突然用nio来做些东西. nio的好处我来说一下:第一,读写都是基于块的,效率高.第二,通过引入selector,简化了网络编程模型,异步非阻塞. ...

  7. 【计算机网络】Socket聊天室程序

    计算机网络第一次实验报告 实验名称:Socket聊天室程序 实验内容 使用流式Socket设计聊天协议,聊天信息带有时间标签和类型标签,本报告中将说明交互消息的类型.语法.语义.时序等具体的消息处理方 ...

  8. 基于C#的socket聊天室(附源码)

    基于C#-socket聊天室 前言 源代码:https://gitee.com/TL0902/term/blob/master/C%23%E8%81%8A%E5%A4%A9%E5%AE%A4/Tcha ...

  9. java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)

    Java团队课程设计-socket聊天室(Day4总结篇) 团队名称: ChatRoom 项目git地址: git提交记录(仅截取部分): 面向对象设计包图.类图 包图 UML类图 总结: 首先总结一 ...

  10. java仿聊天室项目总结_Java团队课程设计-socket聊天室(个人总结)

    Java团队课程设计-socket聊天室(个人总结) 一.团队课程设计博客链接 二.本人负责模块或任务说明 任务1 服务端对socket线程的接受以及对客户端的数据转发操作 任务2 数据库的查找,添加 ...

最新文章

  1. shell编程:实现shell字符串连接功能
  2. Hadoop与Alpach Spark的区别
  3. centos 6.5 安装 lamp 后mysql不能启动_CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境...
  4. 项目收获与体会_践行“十个一”在劳动中收获成长——青岛六十六中高二年级学农实践活动圆满结束...
  5. 腾讯云为小游戏开发者升级工具箱 小游戏联机对战引擎免费用
  6. Java 打 jar 包时,MANIFEST.MF 文件详解
  7. 类似索引Model套Model之 iOS模型闲聊二
  8. 【征稿通知】CCF第37届中国计算机应用大会 CCF NCCA 2022
  9. mybatis返回Date类型数据 格式化
  10. 动态规划之回文串问题
  11. 提示wininet.dll文件找不到的解决
  12. Java二叉树的层序遍历leetcode
  13. 基因重组-冲刺日志(第四天)
  14. 云服务器部署 Web 项目
  15. 程序员必读:摸清hash表的脾性
  16. 海思59V200PQtool环境的搭建
  17. 关闭win10任务视图功能
  18. java 字符串加密_如何用JAVA实现字符串简单加密解密?
  19. 异常:com.alibaba.druid.sql.parser.ParserException: ERROR. token : DESC, pos : 72
  20. 〖大前端 - 基础入门三大核心之CSS篇③〗- CSS选择器之复合选择器与伪类

热门文章

  1. 权重不确定的概率线性回归
  2. 每日算法系列【LeetCode 927】三等分
  3. leetcode—15.链表双指针题目python解答
  4. 基于DEAP库的python进化算法--遗传算法实践--非线性函数寻优
  5. 《统计学习方法》——感知机
  6. 图论算法——最短路径算法
  7. 游戏动词和宾语设计案例精选
  8. python3爬虫 - 利用浏览器cookie登录
  9. Python模块:配置文件解析器configparser
  10. caffe的python接口学习:caffemodel中的参数及特征的抽取(转载)