TA的每日心情 | 开心 2024-4-15 16:20 |
---|
签到天数: 286 天 [LV.8]以坛为家I
|
本帖最后由 lcs6615 于 2013-6-2 14:37 编辑
! U4 w- a' P5 X" S. B0 n1 p; H& Y! `, ^2 s/ b& a
官网地址:www.convnet.net 里面有更多详细的介绍和下载地址! ~. \& l8 h3 w& y/ l b( \' b
官网宣传介绍图片见下:4 U& J% W6 L( w: b2 ^0 ?5 H5 z& L
- o3 G+ v3 X; g3 S" ]& y
# c, {: D1 R( H( N$ o
$ k+ E1 y7 Q: v& _
( [; c3 F4 z- A. `. V0 A2 V9 h6 X- _3 Q
应用场景:- {4 c, y a! P: W% t5 x1 @
, m1 S" V2 G) |) g; s$ v
" k6 m: V9 ~+ O: j7 d' v/ \! ~7 s: y; h5 G
ConVnet的工作流程如下:
3 W$ Y M2 J, j一、初始化过程% n5 R0 i/ j! H& v$ j, i; `$ c q
读取ini目录下的config.ini以及ui.ini文件
2 _1 q/ S, E5 O/ Y% A% I+ H: P5 ~. d6 n
这里对于UI和信息记录的参数不做赘述,只着重说明config.ini文件中的TCPPort以及UDPPort的作用:" E% L7 X" |% a' G5 R) a
& B) z5 l: S: s4 }8 z 如果这两个值非0,则创建用户指定的Tcp、Udp的ConVnet本地服务端口,如果值为0则尝试在8000~9000端口中随机进行创建,并尝试启用UPNP映射端口(如果路由器允许的话); W; M7 w1 }! i8 T: D) J+ m
特殊说明的是,如果你的网络只能映射固定的网络端口到外网,那么请使用ConVnet在本地打开相同值的端口,自定义端口范围1~65535。
( C6 q# `7 P! B* B2 d4 ]8 E& }$ w
! K4 @8 v/ \5 S; e5 F f' M- s二、服务器登录过程
) U$ W; I' E7 e/ f" g+ c# F 调用CVN_Login)! H1 P" j* u5 N9 N# g4 c, \% x) j
服务器反馈网络类型检查服务的端口(用于检测Udp的网络类型)' ^/ k: M* W2 N) ^# |* m
& H# y9 ~! U7 ^. W. b+ k/ a7 O, O 客户端根据服务器反馈消息构建用户列表、用户组列表,提交本地的网络状态; ^; Y% T3 h8 X7 X# ?. f
4 F1 g4 R# K2 m% a9 r R
& b/ v' o; N) h4 @7 K3 R6 ]
三、用户隧道的建立
+ F% d4 `2 S( |$ J" R 2 w! H4 a2 @+ H4 u( d& ? d
客户端单方发起TryConnect的请求,服务器进行握手连接前的验证(是否需要密码,密码是否匹配)) s" |: J0 f5 T. q. ^& m
服务器根据双方的网络状况进行握手前的准备工作:: I# O6 \# f$ q) Y2 V, }
优先选择有UPNP网络端口或者有外网网络端口的机器作为“主接入”,客户机尝试连接“主接入”机,ConVnet同时支持TCP和UDP的两种接入方式,UDP的特性最接近物理层的传输需求,所以作为优先选择的协议,UDP不通的情况下选择TCP协议% d3 D' b. ]; e. _# Y) o
如果双方都没有UPNP网络则进行UDP打洞,双方都是CONE NAT的情况下100%成功,一方是Symmetric nat的情况下90%可以成功,如果不幸两端都是Symmetric nat的情况下则进行端口冲突对撞,成功率在40%。
1 a- j) N7 }/ v 如果UDP端口对撞失败则尝试使用TCP协议进行连接,如果此路不通(双方都无法在INTERNET上启用TCP本地服务)则尝试请求服务器中转。' T+ L6 q6 n, x$ P1 \
, j& n% k! Y! {. M: J1 E* b
四、断线重连机制
+ W: T' Y4 n( c( z0 T 客户端与服务器之间断开3秒后进行断线重连的尝试,如果机器休眠超过30秒则注销重新登录。如果用户的帐号在其他地点登录则不再进行断线重连的尝试。5 Y& Q/ g4 l2 p0 q( F3 e
`4 [7 T5 o: m! F s3 X" b/ H7 j
2 h% h; ]8 q1 E1 v% w9 w7 i6 H% v5 W3 a6 z% r1 o$ @6 ?8 V' |
|
|