存档在 2014年2月

Rose出现 “relation from A to B would cause an Invalid circular***”解决方法

2014年2月20日

UML建模工具Rose出现 “relation from A to B would cause an Invalidcircular inheritance /realization combination解决方法。

出现原因

出现这种情况往往是在绘图之前,两个类A和B之间就建立了关系。
在绘图过程中,由于操作失误,继承关系发生错误,正确继承关系为Man继承自Person。但我在删除该关系时,采用了按“delete”或者右键“edit”—>”delete”方法。此时person和Man之间的关系并没有真正的删除。当我在重新建起两者之间关系时,会出现以下错误。

解决方法

(1)恢复原来的person与Man 之间的错误关系:
具体步骤是在brower中选择继承关系,连接Person与Man
(2)在错误的关系上,右键editàdelete from model 或者(Ctrl+D)删除。
(3)重新建立Person与Man之间的正确关系:

归纳与总结

在rose中采用采用了按“delete”或者右键“edit”—>”delete”方法并不能真正地删除两类之间的关系,需要采用 ctrl+D组合键方式删除。

运行rose时:Failed to check out a key for rose_enterprise_windows

2014年2月20日

Rose安装并破解后,运行时提示如下错误:

Failed to check out a key for rose_enterprise_windows:
FLEXlm Error -2, Invalid license file syntax OR no licenses in file.
FLEXlm Error -15, Cannot connect to license server.

解决办法:
在开始菜单Rational里找到Rational License Key Administrator并运行后, 选定Point to a Rational License Server to get my licenses,单击下一步, Server Name文本框中填写你的机器名号,单击完成。

关联、组合、聚合、依赖比较

2014年2月18日

类之间的关系
1. 种类: Generalization(泛化),Dependency(依赖关系)、Association(关联关系)、Aggregation(聚合关系)、Composition(合成关系)。

2. 其中Aggregation(聚合关系)、Composition(合成关系)属于Association(关联关系),是特殊的Association关联关系。

3. Generalization(泛化)表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。
1
» 阅读更多: 关联、组合、聚合、依赖比较

“Socket c++ library”的Bug提交后的回复

2014年2月18日

Re: About the “Socket c++ library”‍

Thank you very much!
I will try to recreate your problem with using the standard SocketHandlerEp class. I have
only myself used it as a base class for specialized handlers, so there is a problem left to
be discovered!
Best regards
/ah

图示3种NAT

2014年2月18日

Screenshot from 2014-02-18 17:20:27

属性

主机A:192.168.1.11/2000
目的主机C:292.88.88.88/2000
NAT公网:202.115.160.38/5000

3种NAT介绍

Full Cone:接受所有目的地为202.115.160.38/5000的主机数据
Restricted Cone:接受所有目的地为202.115.160.38/5000,且为主机C的数据,主机C可能有多个程序的不同端口向202.115.160.38/5000发送数据
Port Restricted Cone:接受所有目的地为202.115.160.38/5000,且主机C的端口2000发送的数据。

参考

画图工具使用:html5在线画图

NAT类型检测

2014年2月18日

前提条件

有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。

第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就 不能P2P了(检测停止)。
当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检 测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。

第二步:检测客户端NAT是否是Full Cone NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回 发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。

第三步:检测客户端NAT是否是Symmetric NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。
用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。
比 较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。

第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。

注:以上检测过程中只说明了可否进行UDP-P2P的打洞通信,具体怎么通信一般要借助于Rendezvous Server。另外对于Symmetric NAT不是说完全不能进行UDP-P2P打洞通信,可以进行端口预测打洞,不过不能保证成功。

NAT类型

2014年2月18日

各种不同类型的NAT(according to RFC)

(1)全克隆( Full Cone)

NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。

<内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,任何外部主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包。

(2)限制性克隆(Restricted Cone)

NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是,只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包。

内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包。

(3)端口限制性克隆( Port Restricted Cone)

端口限制性克隆与限制性克隆类似,只是多了端口号的限制,即只有内部主机先向IP地址为X,端口号为P的外部主机发送1个IP包,该外部主机才能够把源端口号为P的IP包发送给该内部主机。

内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包。

(4)对称式NAT ( Symmetric NAT)

这种类型的NAT与上述3种类型的不同,在于当同一内部主机使用相同的端口与不同地址的外部主机进行通信时, NAT对该内部主机的映射会有所不同。对称式NAT不保证所有会话中的私有地址和公开IP之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。

内网主机建立一个UDP socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,第一次发送时,NAT会为其分配一个(PublicIP-2,Port-2), 以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).如果NAT有多于一个公网IP,则PublicIP-1和PublicIP-2可能不同,如果NAT只有一个公网IP,则Port-1和Port-2肯定不同,也就是说一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。此外,如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现UDP-P2P通信。

C#编写ZigBee网络拓扑结构显示控制软件, QT编写ZigBee网络拓扑结构显示控制软件

2014年2月17日

1.软件目的:

作为ZigBee无线传感器网络的控制台,不仅需要对整个zigbee网络能够控制,而且需要动态显示zigbee网络的结构,观察当前在线节点及其组织形式,便于远程管理。

2.软件主要模块:

2.1 一种zigbee Tree-Star型网络拓扑结构可视化再现算法
2.2 一种多线程实现串口大规模数据并发处理算法

3.设计语言。

windows采用C#语言,很容易改成c++的dll库。
Linux下采用C语言与C++语言,串口模块采用c语言,其他采用以QT框架为基础编写。

4.可移植性:

C#编写的不具有可移植性。
QT+posix编写的具有可移植性,可以在linux上,windows上,嵌入式ARM上运行。

5.编写环境:

windwos:VS2008 VS2005 VS2012
Linux:QT

6.项目

windows项目:浏览链接
Linux项目:浏览链接