返回首页

介绍
当我刚开始编程的大约5年前,我是在做梦大。我想从头开始,没有问题,快速,可靠和轻量级的聊天系统。
然而,新程序员的最雄心勃勃的项目得到真正的快速击落,这是没有什么不同。我搜查,并努力寻找一个体面的系统或体面的代码将允许我做一些简单的沟通,有一个集中的服务器的客户。显然,这是相当困难的,我找到我没有得到很好的与谷歌,直到几年后,会做正是我想要的东西。
几年去,我收集更多的技能,我决定,quot;嘿,我应该写的聊天systemquot。所以,我就是这样做的。这臭气冲天耶,但我学到了不少东西。响尾蛇是我学到的东西的一个例子。背景
我想一个灵活的系统,将采取什么我给它,并产生我想要的东西。这听起来很愚蠢的探测,但原谅我。我想成为能够序列化的结构,或者发送自定义编码的字节数组,而无需改变我发送方法。响尾蛇可以做到这一点。
作为宠物的项目,并已开始演变成大规模。响尾蛇可以处理,只是不管你实际需要,从客户端 - 服务器连接,甚至处理的UPnP。
响尾蛇有4个主要的命名空间:RattleSnake.ClientRattleSnake.Client.ClientRattleSnake.Client.TcpClientExRattleSnake.ServerRattleSnake.Server.ServerRattleSnake.Server.TcpListenerExRattleSnake.SecurityRattleSnake.Security.WhirlpoolManaged请注意这个类是不是我的创​​作。我只是从C#转换。原许可证和类的通知仍然在地方信贷的原始作者。RattleSnake.Security.MersenneTwister至于与WhirlpoolManaged,我没有创建这个。我只是从C#转换。原许可证和类的通知仍然在地方信贷的原始作者。RattleSnake.Security.EncryptionRattleSnake.UPnP
,它很清楚每个命名空间实际上包含什么,它做什么。
我不得不这样做继承少数情况下,如继承的TcpClient放大器;的TcpListener提供未来的功能(例如物业MyBase.Active())我更新这个项目。不过,现在,响尾蛇是比较完整的减我想放进去的几个新特点使用代码
这是非常简单的使用响尾蛇的客户端,服务器,UPnP的,和安全功能。客户端和服务器是完全事件驱动,使得它非常简单易懂。
下面是一个使用客户端的简单的例子:

' This is for the Client. 

Dim _rsc As New RattleSnake.Client.RattleSnakeClient() 



' Now perform a connection

_rsc.Connect("127.0.0.1", 6110)  

这是所有你需要做的进行连接。但是,如何保持客户端连接时的轨道?接收数据,或断线,甚至是一个例外呢? RattleSnakeClient类处理所有的事件:{C}
将触发此事件时,建立连接。的EventArgs通过包含以下属性:IP - 返回的IP地址,客户端连接(作为String)。港口 - 返回客户端连接(端口)的端口号。
Public Event DataReceived(ByVal sender As Object, _

    ByVal e As EventArgs.RattleSnakeClientDataReceivedEventArgs)

将触发此事件当数据通过连接。的EventArgs通过包含以下属性:数据 - 返回一个字节数组,其中包含已接收的所有数据。 对象 - 返回一个对象,表示接收到的数据通过系列化的尝试。如果序列化失败,它将返回一个新的对象。{体C3}
将触发此事件时RattleSnakeClient抛出一个异常。的EventArgs通过包含以下属性:例外 - 返回被抛出的异常。
这些事件是简单,直观,并保持响尾蛇平稳运行
发送数据与响尾蛇也非常简单。
这是容易与响尾蛇发送数据。它也可以简单地传递BeginSend()的方法,是Serializable对象以及发送;响尾蛇在内部使用。
断线是一件轻而易举的:{C5的}
响尾蛇,除非它真的很重要,断开()将始终采取一个真正的。真告诉响尾蛇通知对方断线发生。我这样做只是为了确保有另一端,否则可能避免提出没有例外。
现在,在响尾蛇的UPnP类的快速概览。 UPnP的类允许快速和轻松地添加端口映射(或搬迁)的UPnP设备。这是一个的UPnP类的方法,属性,枚举列表:协议的TCPUDP的删除()()LocalIP()打印()Dispose()方法
每一种方法都有XML风格的注释,所以我不会去到很多细节,但它很容易添加一个端口映射到一个UPnP功能的设备:
这是所有需要添加端口映射到一个UPnP功能的设备。代码添加到本地IP地址映射,端口100的TCP协议和描述quot; Descriptionquo​​t;删除很简单,因为:{C7-}
,只是刚才添加的端口已经被删除。 ()和删除()例程内部调用(),所以,作为一个程序员,它不要求做到这一点,以及(然而,该类将引发ArgumentException())。
响尾蛇,作为一个整体,不应该是漏洞百出。它已经历了多次实地测试,没有在所有的许多错误,但如果任何错误弹出,我会尽我所能尽快解决这些问题。景点
我要指出,响尾蛇已经看到了它的公平份额重写。截至2011年12月5日,这是第三响尾蛇提供更清洁,更高效的代码重写。 UPnP是最近除了响尾蛇,我花了一点研究,找出如何在Windows中很容易做到。我用的是"轻松"而不是松散的,因为它是相对简单,但需要搞清楚位,使其工作(例如,它只是在我相信。NET 3.5和以上所需的接口没有暴露在NET 2.0 )。历史2011年12月5日 - 初始释放

回答

评论会员:游客 时间:2012/02/07
sherrele:嗨,我刚开始使用的VisualBasic2010Express的,为了编写一个非常简单的程序检索数据通过以太网端口的RF频谱分析仪。该分析仪采用可编程仪器的SCPI1999年,这是一个相对简单的约100个​​命令组的标准命令。我写了一个类似的计划,很多年前,在VisualBasic6。该方案通过什么叫分析仪的GPIB端口的数据检索。如今,新的分析仪的以太网端口和使用上述SCPI命令语言。但我的专业是,RF工程师,不是一个程序员。所以我要通过重新学习,我学到了什么几乎所有的过程中并没有年前。我想在我的项目中使用您的RattleSnake2,因为它似乎是我以前在VB6中使用的Winsock组件的完美替代品。我什么步骤,包括在我的VisualBasic2010快递(NET)项目/参考RattleSnake2?{S0的}'121月8日修改
formlesstree4
评论会员:游客 时间:2012/02/07
对不起,这么长的回应。老实说,我不知道如何开始您的问题。梅辛与它周围,你可以尝试,看看会发生什么,但你可能会更好写一个自定义控件,自己来处理
| torial:我很乐意看到一个较长的文章。给一些不同用途的例子。评上的权衡。论性能。配置评论
|
formlesstree4
评论会员:游客 时间:2012/02/07
时,我有更多的时间来这样做,我一定会扩大这在未来的文章
thatraja:formlesstree4写道:"我一定会在未来扩大本文当我有更多的时间做干就干"等待更新。这样做时,你自由,干杯!
thatraja
我爸爸有心脏病发作{A} |没有人仍然是一个处​​女,生活螺丝大家
评论会员:游客 时间:2012/02/07
taloweb:你的文章很有意思,但对服务器的解决方案和Windows的"净"协议发送?你研究这些替代品吗?你认为在未来做
?formlesstree4
评论会员:游客 时间:2012/02/07
你的P2P作为服务器解决方案的意思吗?为净送,我看它,但我当时感到沮丧,当我看着它
taloweb
评论会员:游客 时间:2012/02/07
是,类似的东西......前一段时间,我是一个伟大的免费软件:""由MatroRealpopup,但它的停产,我想重新...但它并非如此简单。我试图探讨如何创建一个类似的解决方案,使用Messenger协议,没有任何服务器,但我没有时间进一步分析...