本帖最后由 lcs6615 于 2013-6-2 14:37 编辑
; V3 D$ k# ]& r. E7 ~1 x$ |3 k4 e3 g9 V# f# P g3 n$ P: U
官网地址:www.convnet.net 里面有更多详细的介绍和下载地址
" s. F9 p% B1 ?# `5 C, P官网宣传介绍图片见下:6 H5 J& m5 E+ ]% d4 ]; k. ~
; \! u. B# `8 d, s& `$ P$ q
$ `* u( ?" |. E- a+ @
1 P: w: g& _3 R4 _! b
6 C3 I6 R0 O- V7 q应用场景:: C+ C" |/ c. Q
/ ^1 i0 z: n" u& y; ^$ ~8 s( F8 n2 B6 b5 Q+ B& d
; e `/ ?, X, y
ConVnet的工作流程如下:
1 o7 m( `1 W5 |4 G, Q一、初始化过程# B- I! E `) G* _
读取ini目录下的config.ini以及ui.ini文件 - e! S/ c' K0 y/ Y/ j
. t' a% v" e, I( E5 I" g 这里对于UI和信息记录的参数不做赘述,只着重说明config.ini文件中的TCPPort以及UDPPort的作用:
' d$ j( `0 a; E- w$ A& W5 O! M% T
如果这两个值非0,则创建用户指定的Tcp、Udp的ConVnet本地服务端口,如果值为0则尝试在8000~9000端口中随机进行创建,并尝试启用UPNP映射端口(如果路由器允许的话)
, d- @ V0 w4 s; n5 O0 u1 c" a 特殊说明的是,如果你的网络只能映射固定的网络端口到外网,那么请使用ConVnet在本地打开相同值的端口,自定义端口范围1~65535。
5 I$ Y Z. i1 |* _9 y: s% V1 E" g9 G8 X6 Z0 C) Y2 P
二、服务器登录过程- `6 W( S8 i/ \' h4 q: i, j" n
调用CVN_Login)( V* j6 d+ I6 g5 Z* s
服务器反馈网络类型检查服务的端口(用于检测Udp的网络类型), X# ^6 w4 o/ c2 R! L
5 u. |4 ?6 W1 M7 M4 u- M# w) { 客户端根据服务器反馈消息构建用户列表、用户组列表,提交本地的网络状态
) T& r& i- P) N0 b2 r4 w/ a7 K: g3 r; N8 u" l
) Z! m/ p0 N$ }$ r) n* \三、用户隧道的建立6 k5 [ p: ?, l) N
' ?- {5 W9 h0 g
客户端单方发起TryConnect的请求,服务器进行握手连接前的验证(是否需要密码,密码是否匹配)
3 W, U- ^9 z5 c- x5 ~" [3 R2 Q 服务器根据双方的网络状况进行握手前的准备工作:
0 w* o3 e. N" U9 j3 r5 T* X 优先选择有UPNP网络端口或者有外网网络端口的机器作为“主接入”,客户机尝试连接“主接入”机,ConVnet同时支持TCP和UDP的两种接入方式,UDP的特性最接近物理层的传输需求,所以作为优先选择的协议,UDP不通的情况下选择TCP协议" ]$ [1 \. e. ]
如果双方都没有UPNP网络则进行UDP打洞,双方都是CONE NAT的情况下100%成功,一方是Symmetric nat的情况下90%可以成功,如果不幸两端都是Symmetric nat的情况下则进行端口冲突对撞,成功率在40%。" }* H' u8 r; r% A+ `0 p
如果UDP端口对撞失败则尝试使用TCP协议进行连接,如果此路不通(双方都无法在INTERNET上启用TCP本地服务)则尝试请求服务器中转。: t- U- j7 N9 Q3 `, s
: T7 C% k9 @' P9 m
四、断线重连机制
7 C$ n1 B1 s, p1 g! s; M( e 客户端与服务器之间断开3秒后进行断线重连的尝试,如果机器休眠超过30秒则注销重新登录。如果用户的帐号在其他地点登录则不再进行断线重连的尝试。
" Q& }1 Y8 k* L' e& K8 y4 v" c1 s1 {* o% r$ D
1 z7 |- b! ~- h: i# r- C$ [, U& w7 m" ]2 n- C
|