作者: 乔克斯
查看: 61798|回复: 125
打印 上一主题 下一主题

【开源通讯组件SanNiuSignal】C#编写的基于Socket的异步通信系统

  [复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2014-12-26 10:19:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
查看: 61798|回复: 125
开源通讯组件SanNiuSignal】C#编写的基于Socket的异步通信系统
说明:
自从推出了SanNiuSignal.DLL,用户反映还是满好的。为了更好的服务于大家,我已经修复了很多BUG,同时把这个DLL开源。下面就先来介绍下!

效果图:
1.DLL开发出的简单的通信系统。


详细介绍:
想使用哪个模块就启动哪个模块,可以和客户形成外网通信
  • SanNiuSignal是一个基于异步socket的完全免费DLL,它里面封装了Client,Server以及UDP。
  • 有了这个DLL,用户不用去关心跳,粘包 ,组包,发送文件等繁琐的事情。
  • 大家只要简单的几步就能实现强大的通信系统,能帮助到大家是本人觉得最幸福的事情。
  • 也希望大家在用的过程中找出DLL中不足的地方,好改正。
  • 此DLL的苹果版java版正在努力开发中......交流QQ:365368248。

下面为大家介绍一下,如何使用SanNiuSignal。

1 ) :

  • TCPServer服务器,通过静态方法TxStart.startServer注册成功服务器ITxServer;
  • 然后通过ITxServer设置好各种属性;
  • 最后启动ITxServer.StartEngine();就可以了;
  • 具体可以到demo里去看;相对来说比较简单,下面来说一下需要注意的地方

一:

  • ITxServer.BufferSize,就是接收数据缓冲区大小;
  • 默认为1kb,不要小于50字节,而且要和客户端设置成一样;
  • 否则会出现不可预知的错误;这个缓冲区的大小,不会影响你每次发送数据的大小;
  • 大小只能提高你的发送速度

二:

  • ITxServer.sendMessage 发送前先判断此IPEndPoint客户端是否在线;
  • 因为如果不在线等情况发生;此方法没有任何消息产生;如果发送成功并且对方已经收到;会触发发送成功的事件;

三:用户可以通过ITxServer.FileLog记录服务器的运行信息;

2 ) :

  • TCPClient客户端,通过静态方法TxStart.startClient(服务器地址或网址, 服务器端口号)注册成功客户端ITxClient;
  • 然后通过ITxClient设置好各种属性;最后启动ITxClient.StartEngine();跟服务器启动差不多;具体可以到demo里去看;

客户端要注意的一些地方

  • 如果非服务器强制关闭客户端的情况下,掉线的话,客户端默认是要重连的;他的原理是这样的,每10秒重连一次;
  • 重连 ITxClient.ReconnectMax次如果失败;会自动关闭客户端引擎;在重连的过程中;你可以改变客户端连接服务器的IP地址和端口号;
  • 但如果当断开的时候不想重连;可以设置ITxClient.ReconnectMax=0;
  • 登录篇,在引擎启动之前,用户可以设置ITxClient.OutTime来设置超时时间;默认为10秒,也就是说10秒之内肯定会有一个登录结果;登录成功或登录失败。有了登录结果会触发登录结果事件;

3 ) :

  • Udp引擎,通过静态方法TxStart.startUdp()注册成功UDP--IUdpTx;然后通过IUdpTx设置好各种属性;
  • 最后启动IUdpTx.StartEngine();如果在启动之前要绑定端口号,请在这里设置IUdpTx.Port;否则是随机使用本地端口;
  • 无论是UDP还是服务器和客户端;它们的很多方法和属性以及事件都是相同的,因为他们都继承了通信系统的基接口ITxBase;

下面是UDP引擎要注意的地方

一:

  • UDP的优势在于速度快但不太可靠;所以有些属性不能设置的太过,如IUdpTx.BufferSize;
  • 默认为1KB,如果在广域网上发送信息,缓冲区大小不要超过默认值;否则数据会丢失,如果一次性数据大于1KB;
  • 也没事,系统会自动分包发送;不太会丢包。

4 ) :

  • 文件发送系统,通过静态方法FileStart.StartFileSend(IFileSendMust)生成一个文件发送系统IFileSend;
  • 其中IFileSendMust是必须实现的一个接口;具体参照demo;然后通过IFileSend设置好各种属性;
  • 发送还是要通过前面的三个引擎系统发送的;如ITxClient.SendFile 这时会返回一个文件标签,是一个整数;
  • IFileSend可以通过操作这个标签来操作这个正在发送的文件;接收文件系统也一样;也是通过文件标签来操作;
  • 文件续传也是一样,也要通过前面的三个通信引擎系统进行续传;因为文件系统不能决定用户通过哪个通信系统进行续传的;
  • 例如IUdpTx.ContinueFile进行续传;大家也可以试一下 掉线之后重新连接也可以续传;

5 ) :

  • 文件接收系统,通过静态方法FileStart.StartFileReceive(IFileReceiveMust)生成一个文件接收系统IFileReceive;
  • 其中IFileReceiveMust是接收方必须实现的一个接口;具体参照demo;然后通过IFileReceive设置好各种属性;

下面来讲讲文件系统要注意 的几个要点
一:
    每个文件都有一个文件标签,发送系统和接收系统是通过控制这个标签来控制这个文件的;如果是同一个文件传输,标签也一样的;
二:
    要注意属性BufferSize缓冲区大小,他是代表一次传送的字节数;如果这个文件缓冲区越大,传输速度越快;具体要设置成多少,大
家自己去调试;TCP传输的话一般可以设置成比较大,但UDP的话这个不要超过1KB;所以传输大文件尽量不要用UDP这种不可靠的东东;
三:
    当网络等各种原因中断文件的时候;会触发文件中断事件;文件自动处于暂停发送或接收状态;等待续传;续传的发送方,如果对方
同意续传;对方将不会触发续传开始的方法;别的大家可以通过demo里去发现;



总结:
其实这个DLL相对来讲是比较简单的;大家只要掌握这五个接口;
  • ITxServer TCP服务器接口
  • ITxClient TCP客户端接口
  • IUdpTx UDP接口
  • IFileSend 文件发送方接口
  • IFileReceive 文件接收方接口
前面三个接口是通过TxStart启动;
后面二个文件接口 是通过FileStart启动
今天先讲到这里,希望这个DLL对大家有所帮助,不足之处希望通过QQ或论坛大家一起交流;谢谢


案例Demo下载:


SanNiuSignal通讯组件源码下载:

评分

参与人数 10威望 +3 金钱 +19 贡献 +2 收起 理由
IT小白154161 + 1
xulong20006 + 3 感谢分享,LZ辛苦了~
qin25836 + 1 感谢LZ对论坛做出的贡献~
lp0213 + 2 赞一个!
wjsuit + 1 感谢LZ对论坛做出的贡献~
wj3031 + 1 感谢分享,LZ辛苦了~
ccqing + 1 感谢分享,LZ辛苦了~
billyChen + 1 很给力!
Blue_Pen + 3 + 5 + 2 很给力!
HJL + 3 感谢分享,LZ辛苦了~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 转播转播
回复 论坛版权

使用道具 举报

沙发
spirit 发表于 2014-12-26 10:41:07 | 只看该作者
我的金币又被剥削了
板凳
ikillmeba 发表于 2014-12-26 11:23:56 | 只看该作者
看看到底怎么样,学习一下
地板
CastleDrv 发表于 2014-12-26 16:29:19 | 只看该作者
呜啦啦,好东西一定要支持
5#
iansoft 发表于 2014-12-27 06:07:38 | 只看该作者
非常感谢 支持开源
6#
jeanary 发表于 2014-12-28 21:39:52 | 只看该作者
支持个,感谢分享
7#
cjkall 发表于 2014-12-29 11:37:28 | 只看该作者
支持个,感谢分享
8#
HJL 发表于 2014-12-29 14:34:29 | 只看该作者
楼主,小弟我在拜读源码的时候看到属性 SocketServer.cs文件时,里面的属性 ClientMax 有做 100 的限制,那么问题来了,请问楼主这个是处于性能的考虑而设置的还是什么?
9#
 楼主| 乔克斯 发表于 2014-12-29 14:56:37 | 只看该作者
HJL 发表于 2014-12-29 14:34
楼主,小弟我在拜读源码的时候看到属性 SocketServer.cs文件时,里面的属性 ClientMax 有做 100 的限制,那 ...

ClientMax:允许最多客户端数。用来限制接入人数上限,也可以达到性能限制的作用,比如预计你的机器只能支持多少人,那就能设置最高上限多少人。

10#
HJL 发表于 2014-12-29 15:10:32 | 只看该作者
乔克斯 发表于 2014-12-29 14:56
ClientMax:允许最多客户端数。用来限制接入人数上限,也可以达到性能限制的作用,比如预计你的机器只能支 ...

嗯,了解,谢谢楼主的回答以及无私奉献!
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-11-17 05:36, Processed in 0.597919 second(s), 33 queries , Gzip On.

快速回复 返回顶部 返回列表