C# 异步TCP Socket聊天室(1服务器,N客户端)
该例子是一个异步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
转载于:https://www.cnblogs.com/guoyiqi/archive/2011/08/07/2139168.html
C# 异步TCP Socket聊天室(1服务器,N客户端)相关推荐
- 回调函数 线程_从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2...
根据 <0 基于socket和pthread实现多线程服务器模型>所述,server创建子线程的时候用的是以下代码: pconnsocke = (int *) malloc(sizeof( ...
- C#+Socket 聊天室(实现公网通信 客户端-服务器端-客户端)
文章目录 简述 功能演示视频(b站) 准备工作 服务器端 服务器端界面 服务器端代码 客户端 客户端界面 客户端代码 总结 简述 关于Socket的原理我就不在这里赘述了,有大佬已经作详细的说明了: ...
- Linux socket聊天室
目录 一.运行效果 1.分别编译客户端和服务端代码 2.运行 3.使用效果 二.代码 chat.h 服务端代码 客户端代码 一.运行效果 1.分别编译客户端和服务端代码 gcc client.c -o ...
- 从0实现基于Linux socket聊天室-实现聊天室的公聊、私聊功能-4
前面文章链接如下: <从0实现基于Linux socket聊天室-多线程服务器模型-1> <从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2> &l ...
- 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》
基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...
- java nio.2群发_JAVA NIO TCP SOCKET 聊天群发
以前都是用一般的socket编程,用线程来控制.最近突然用nio来做些东西. nio的好处我来说一下:第一,读写都是基于块的,效率高.第二,通过引入selector,简化了网络编程模型,异步非阻塞. ...
- 【计算机网络】Socket聊天室程序
计算机网络第一次实验报告 实验名称:Socket聊天室程序 实验内容 使用流式Socket设计聊天协议,聊天信息带有时间标签和类型标签,本报告中将说明交互消息的类型.语法.语义.时序等具体的消息处理方 ...
- 基于C#的socket聊天室(附源码)
基于C#-socket聊天室 前言 源代码:https://gitee.com/TL0902/term/blob/master/C%23%E8%81%8A%E5%A4%A9%E5%AE%A4/Tcha ...
- java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)
Java团队课程设计-socket聊天室(Day4总结篇) 团队名称: ChatRoom 项目git地址: git提交记录(仅截取部分): 面向对象设计包图.类图 包图 UML类图 总结: 首先总结一 ...
- java仿聊天室项目总结_Java团队课程设计-socket聊天室(个人总结)
Java团队课程设计-socket聊天室(个人总结) 一.团队课程设计博客链接 二.本人负责模块或任务说明 任务1 服务端对socket线程的接受以及对客户端的数据转发操作 任务2 数据库的查找,添加 ...
最新文章
- shell编程:实现shell字符串连接功能
- Hadoop与Alpach Spark的区别
- centos 6.5 安装 lamp 后mysql不能启动_CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境...
- 项目收获与体会_践行“十个一”在劳动中收获成长——青岛六十六中高二年级学农实践活动圆满结束...
- 腾讯云为小游戏开发者升级工具箱 小游戏联机对战引擎免费用
- Java 打 jar 包时,MANIFEST.MF 文件详解
- 类似索引Model套Model之 iOS模型闲聊二
- 【征稿通知】CCF第37届中国计算机应用大会 CCF NCCA 2022
- mybatis返回Date类型数据 格式化
- 动态规划之回文串问题
- 提示wininet.dll文件找不到的解决
- Java二叉树的层序遍历leetcode
- 基因重组-冲刺日志(第四天)
- 云服务器部署 Web 项目
- 程序员必读:摸清hash表的脾性
- 海思59V200PQtool环境的搭建
- 关闭win10任务视图功能
- java 字符串加密_如何用JAVA实现字符串简单加密解密?
- 异常:com.alibaba.druid.sql.parser.ParserException: ERROR. token : DESC, pos : 72
- 〖大前端 - 基础入门三大核心之CSS篇③〗- CSS选择器之复合选择器与伪类