玄机论坛Socket类库源码 当前版本 2.6.3 更新日期:10-09/2015 z
http://bbs.msdn5.com/thread-27-1-1.html
本类库采用TcpLister,TcpClient高度封装,
采用NetworkStream进行异步模式读取数据.
采用Semaphore来进行并发控制,
放弃异步的最大原因还是在对于新手朋友来说难以理解异步的处理方式,在本类库中还有一个没有加入工程的asynchelper,这个类库是纯异步实现.
当前处理方式: 异步+同步 ,海量数据并发不是靠异步就能解决的问题,在对学习Socket和想快速使用Socket的朋友来说,同步是很好的选择.
可同时接受5000+连接同时访问,而CPU消耗完全忽略不计..
本着代码简洁,简单.通俗易懂的原则,进行代码封装,不像其他通信框架写很多各式各样的接口.对新手朋友和刚接触通信程序的朋友带来很大的困扰.
本代码完全开源,但请保留署名,以示尊重.!
感谢 tan133 对本类库的支持,几乎几个更新的bug/不人性化 都是他找出来的.很给力..
更新日志
- 2.6.3
- 修正缓冲区大小为1024
- 新增服务端重载,可监听所有网卡
- 修正若干小bug.
- 2.6.2修正部分
- 增加服务端Demo多次开启判断.
- 增加ErrorCode中的ConnectSuccess状态(用于推送连接状态)
- 修正一写无用/冗余代码
- 增加客户端Demo状态推送扩展
ErrorCode可以自行扩展为StatusCode,用来区分不同的状态.
- 修改原发送sendData 方法为SendToClient 允许直接发送byte数组
- 增加 SendToClient 重载 【 直接发送byte 】
/// <summary>/// 向某一位客户端发送信息/// </summary>/// <param name="ip">客户端IP+端口地址</param>/// <param name="SendData">发送的数据包</param>public void SendToClient(IPEndPoint ip, byte[] SendDataBuffer)
- 增加掉线重连(自动复活) 方法名 : RestartInit()
- 增加几个异常推送的枚举 ErrorCode
/// <summary>/// 具体错误类型/// </summary>public enum ErrorCodes{/// <summary>/// 对象为null/// </summary>objectNull,/// <summary>/// 连接时发生错误/// </summary>ConnectError,/// <summary>/// 尝试发送失败异常/// </summary>TrySendData,}
下面我和大家一起来分享这个类库的使用方式.
服务端的调用
先来看下服务端的界面
第一个列表框用来获取服务端状态信息.
第二个列表框用来获取客户端发来的消息.
一个下来列表框来记录客户端上线.边上的0来记录当前连接数
界面非常简洁,咱们来看类库的使用方式.
第一步,引入命名空间
当引用xuanjiSocket类库以后,请添加
using XuanJiSocket;
添加服务端类.如果没有引入命名空间,那么可以将鼠标光标置于类变量中,按快捷键 Shift + Alt + F10 自动引入类库命名空间
SocketHelper.TcpServer server;
private void ServerDemo_Load(object sender, EventArgs e){ server = new SocketHelper.TcpServer();//初始化变量
}
在窗体加载事件中,完成对server变量的初始化.
SocketHelper.pushSockets = new SocketHelper.PushSockets(Rec);
这是本类非常重要的委托变量.
它的作用就是推送所有信息.!请在Start前对其初始化.!
private void Rec(SocketHelper.Sockets sks){}
这是处理推送器消息的方法.!
SocketHelper.Sockets
大家可以看下这个自定义对象
/// <summary>/// 自定义Socket对象/// </summary>public class Sockets{/// <summary>/// 接收缓冲区/// </summary>public byte[] RecBuffer = new byte[8 * 1024]; /// <summary>/// 发送缓冲区/// </summary>public byte[] SendBuffer = new byte[8 * 1024];/// <summary>/// 异步接收后包的大小/// </summary>public int Offset { get; set; }/// <summary>/// 空构造/// </summary>public Sockets() { }/// <summary>/// 创建Sockets对象/// </summary>/// <param name="ip">Ip地址</param>/// <param name="client">TcpClient</param>/// <param name="ns">承载客户端Socket的网络流</param>public Sockets(IPEndPoint ip, TcpClient client, NetworkStream ns){Ip = ip;Client = client;nStream = ns;}/// <summary>/// 当前IP地址,端口号/// </summary>public IPEndPoint Ip { get; set; }/// <summary>/// 客户端主通信程序/// </summary>public TcpClient Client { get; set; }/// <summary>/// 承载客户端Socket的网络流/// </summary>public NetworkStream nStream { get; set; }/// <summary>/// 发生异常时不为null./// </summary>public Exception ex { get; set; }/// <summary>/// 新客户端标识.如果推送器发现此标识为true,那么认为是新的连接/// </summary>public bool NewClientFlag { get; set; }}
每个属性都有注释,来解释这个属性的作用..具体处理细节.请下载demo阅读
上面那些信息绝非无用,而是整个类的重中之重以及消息处理方式.
启动类库,并开始监听
server.InitSocket(IPAddress.Any, 9527);//监听所有地址,监听端口为9527server.Start();//启动服务端
之前在窗体加载时已经初始化过变量,现在直接使用它的InitSocket来配置服务端.使用Start方法启动监听.!
默认调用后便认为监听成功.!
如若其他情况,例如异常时: 会推送监听失败消息至服务端Rev方法中.具体参阅源码.
停止服务端
直接调用Stop方法即可停止服务端.Stop方法调用后,可继续启动服务端.!
至此,服务端的描述就介绍完了,使用非常简单,
你要做的就下面几件事:
1 、 声明服务端变量。
2 、 初始化推送器。
3 、 配置服务端。
4 、 启动服务端
服务端发送信息
服务端有两个自带方法
server.SendToAll("服务端消息:www.xuanjics.com 随机消息:"+Guid.NewGuid().ToString());//直接发送字符串
该方法将会对所有连接至服务端的客户端发送消息.如果在发送中客户端下线或发生异常,服务端将维护客户端集合 ClientList
ClientList 会在客户端接入时添加.如果发生异常等情况会自动删除
SendToClient(IPEndPoint ip, string SendData);
像单独某位客户发起数据.
当客户端连接时,除去ClientList会自动维护列表外,也会将客户端推送至UI界面,供大家组合自己想要的客户端列表.详细请阅读demo
客户端介绍
客户端与服务端一样,需要先声明客户端变量,
SocketHelper.TcpClients client; //声明客户端变量 与服务端一样在窗体加载时初始化.
接着初始化推送器,
SocketHelper.pushSockets = new SocketHelper.PushSockets(Rec);//在窗体加载时初始化推送器
配置客户端,启动客户端.
client.InitSocket(ip, int.Parse(port)); //IP地址支持字符串类型client.Start();
客户端发送方法,与服务端一致.调用Send方法.调用Start方法来连接服务器,调用Stop方法断开连接.支持断开后重新连接服务端
最后来一张运行时的截图吧
Demo + 类库下载地址:
XuanJiSocketDemo_2.6.4.zip (164.76 KB, 下载次数: 586, 售价: 1 紫晶)
转载于:https://www.cnblogs.com/zeroone/p/5117787.html
玄机论坛Socket类库源码 当前版本 2.6.3 更新日期:10-09/2015 z相关推荐
- .NET Core跨平台开发BBS论坛(内涵源码+完整操作视频)
今天我们谈谈论坛,和如何利用.NET Core跨平台开发BBS. 在互联网刚刚兴起的年代,BBS是重要的娱乐与信息来源.而随着移动互联网兴起,传统PC产物逐渐没落,许多产品都相继的夭折.曾经火爆全网的 ...
- 常用jdk类库源码分析以及各个包
常用jdk类库源码分析以及各个包 1.java.lang包 java.lang包 是Java中最常用的包,程序不需要注入,就可以使用该包中的类,利用包中的类可以设计最基本的Java程序. 2.java ...
- 分享24个上传下载 和32个社区论坛ASP.NET源码,总有一款适合您
分享24个上传下载 和32个社区论坛ASP.NET源码,总有一款适合您 24个上传下载 和32个社区论坛ASP.NET源码下载链接:https://pan.baidu.com/s/16giRmnYDQ ...
- APP论坛社区软件源码 APP封装
简介: APP论坛社区软件源码网站源码APP封装,不定时更新不定时修复bug, 后台可修改QQ登录.注册登录.启动图.分类板块等.支持聊天. 网盘下载地址: http://kekewl.cc/4tLf ...
- 一款社区论坛小程序源码
简介: 这是一款社区论坛小程序源码(修复登录图片发布上传问题) 内涵强大的功能 支持多种多样的发帖模式 比如发图文,发语音,发涂鸦,发视频等 另外也可以设置为只能会员才可以发 另外还拥有礼物功能,可以 ...
- 一款社区论坛小程序源码(修复登录图片发布上传问题)
简介: 这是一款社区论坛小程序源码(修复登录图片发布上传问题) 内涵强大的功能 支持多种多样的发帖模式 比如发图文,发语音,发涂鸦,发视频等 另外也可以设置为只能会员才可以发 另外还拥有礼物功能,可以 ...
- android studio开发十一 Library第三方类库源码, Jar包和SO库
原创: 发现android里面不熟悉的东西太多了,查了好多资料,终于搞清楚 Library第三方类库源码, Jar包和SO库这些都是干什么的了,怎么使用它们了. [Library第三方类库源码] Ja ...
- 基于JAVA东理咨询交流论坛计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA东理咨询交流论坛计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA东理咨询交流论坛计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 超详细的逐句介绍Java网络编程之Socket类函数源码讲解(全)
一.Socket类 Socket 类表示通信双方中的客户端,用于呼叫远端机器上的一个端口,主动向服务器端发送数据(当连接建立后也能接收数据).下面我将从源码的角度来介绍Socket类的内部原理及其方法 ...
最新文章
- PAT A1030 动态规划
- 数据存储之属性列表Plist
- jquery之ajax请求工具类
- C++中什么时候用new[]申请,可以用delete释放
- 如何在 SAP UI5 应用中集成第三方库 :一个在移动设备上查看 Web 应用打印调试信息的小技巧
- 花里胡哨,不协调统一的界面,正如看到一个穿花里胡哨衣服的人,让人作呕,不想接近。...
- html中contentEditable属性
- JS-面向对象---属性的特性 / 修改属性的特性
- Django文件上传***
- 树莓派+docker+tensorflow
- mongovue 导入mysql_使用mongovue把sqlserver数据导入mongodb的步骤
- android 混淆字符串,android 代码混淆
- 购买计算机相关配件的会计分录,购买电脑配件自己组装电脑怎么写会计分录
- 教老婆学python
- 【转载】一些常用的WebServices 天气,IP,邮编,Emai
- 帮你一个简单的微信怎么刷票及微信如何刷票技巧「图文教程」
- Android 多渠道打包与开发
- Acrobat 删除pdf页面
- 通过JAVA代码,将文字生成图片
- python 情感分析实例_基于Python的情感分析案例