精易论坛

标题: 开源!服务器源程序后期希望完成点对点,点对多多人视屏互动程序,服务器1 [打印本页]

作者: a285166531    时间: 2016-10-16 20:43
标题: 开源!服务器源程序后期希望完成点对点,点对多多人视屏互动程序,服务器1
这是服务器源程序,正在开发中,不定期更新,今天写了1天完成以下内容

服务器。。。
。。。1.草创服务器数据库
。。。2.自带客户验证登陆
。。。3.服务器完成登陆验证,并返回登陆信息给客户Duan

;服务器信息
501:设置服务器失败,请检查
502:系统正常启动
503:系统启动失败,请检查端口
;数据库信息
601:角色数据库创建失败,请检查
602:创建角色数据库成功
603:登录信息数据库创建失败,请检查
604:登录信息数据库成功
605:打开角色信息数据库成功
606:打开角色信息数据库失败
607:打开登录信息数据库成功
608:打开登录信息数据库失败
;客户Duan信息
701:客户连接服务器成功
702:服务器连接测试失败,请检查网络配置
703:客户Duan发送登录信息成功
704:客户Duan发送登录信息失败,请检查网络配置
;服务器客户信息
801:有客户进入,IP地址:
802:有客户连接,IP地址:
803:有客户意外断开连接,IP地址:
804:客户发送信息出错,IP地址:
805:有客户XXX请求登录,IP地址:
/*本人的上一篇帖子  txt转HTML的模块,
*是我好几年前开发的小玩意,拿出来玩
*玩,有朋友说无图无真相,我就郁闷了,
*这个帖子里我把图加上
**/




服务器.rar

6.98 KB, 下载次数: 88, 下载积分: 精币 -2 枚


作者: a285166531    时间: 2016-10-16 20:48
.版本 2

.子程序 _服务器_启动_启动按钮_被单击
.局部变量 角色信息字段表, 字段信息, , "7"
.局部变量 登录信息字段表, 字段信息, , "5"
.局部变量 客户句柄, 整数型
  请把这里的数组改成7和5不然会报错,,,,,,,,,,请下载玩的亲们修改,,,
作者: 轮回ゝ    时间: 2016-10-16 20:49
厉害了 我的哥  你这是开发的什么玩意
作者: 牛哥    时间: 2016-10-16 20:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: a285166531    时间: 2016-10-16 21:08
轮回ゝ 发表于 2016-10-16 20:49
厉害了 我的哥  你这是开发的什么玩意

你跟着看我更新你就能知道了。
作者: asfor78    时间: 2016-10-16 21:36
支持下  很给力!
作者: 逆夏    时间: 2016-10-16 22:01
给与以下建设性意见、1.不要使用远程服务支持库,那玩意很蛋疼且不稳定 2.服务器采用插件式开发,不要就直接一个exe,不然会出现重定向的尴尬场景 3.点对点采用打洞模式,不要什么数据都走服务器。 4.服务端尽量简洁,最好采用PHP开发 5.服务器数据最好使用内存库,而不是什么都直接转发中转。

作者: a285166531    时间: 2016-10-16 23:27
逆夏 发表于 2016-10-16 22:01
给与以下建设性意见、1.不要使用远程服务支持库,那玩意很蛋疼且不稳定 2.服务器采用插件式开发,不要就直接 ...

谢谢,收到,我会努力的
作者: a285166531    时间: 2016-10-16 23:34
逆夏 发表于 2016-10-16 22:01
给与以下建设性意见、1.不要使用远程服务支持库,那玩意很蛋疼且不稳定 2.服务器采用插件式开发,不要就直接 ...

其实说实话不了解什么是打洞,baidu了一下你看下这个概念对吗?
打洞这原理也不是我起码不是CSDN中任何一个人所创的,这个原理应该来网关(路由器NAT)的制造者,首先不请自来的数据NAT会毫不客气的丢掉的,这大家都认可,然后就是那套打洞逻辑了:



我们先看下图:





在Client A和Client B之间建立UDP直连的过程如下:



(1)  Client A登录Server S,NAT A 为这次的Section分配了一个端口55000,那么Server S收到Client A的地址是100.10.10.10:55000,这就是Client A的外网地址。



(2)Client B登录 Server S, NAT B 给此次Section分配的端口是44000,那么Server S收到B的地址是:200.20.20.20:44000。



此时,Client A 与Client B 都可以与Server S通信了。如果此时Client A想直接发送UDP数据包给Client B,那么 Client A可以从Server S 中获得B的公网地址:200.20.20.20:44000,但是Client A还不能使用该公网地址直接和Client B通信,因为此时NAT B会将Client A主动发来的信息丢弃,因为此数据包是没有会话记录的。



(3)现在需要在NAT B上打一个方向为100.10.10.10:55000(即Client A的外网地址)的洞,那么Client A发送到200.20.20.20:44000的信息,Client B就能收到了。



(4)Server S负责向Client B发送打洞指令。



(5)Client B向Client A的公网地址发送一个UDP报文,虽然此时数据包会被NAT A丢弃,但是在NAT B上建立了会话记录,不会丢弃Client A的包了。



(6)Server S通知Client A "洞"已打好,Client A可以发数据包给Client B了。



(7)Client A向Client B发送UDP包。

(8) 至此双方可以进行UDP通信了。



注意:

以上过程仅适合Cone NAT的情况,如果是对称的NAT,那么当Client B向Client A发送报文时,Client A的打洞端口已经从新分配了,Client B将无法得知,这个时候可以用一个端口猜测算法(该算法不适用全部,但大部分适用)。



还有一点,网络通信是很复杂的,UDP数据包容易丢包,所以发数据时要多发几次,而且是连续的发,因为打洞的UDP端口是有生命周期的,这个周期有时候很短,所以有些同学打不通,或者一时通一时不通,于是就搞不明白什么原因,还有要会反过来打,尤其是TCP,正打有时候不通,反过来就通了。

TCP打洞跟这个类似,但真正实现起来是不一样的,我相信我这里描述的跟网上很多人描述的都大同小异,其实说实话,大部分人提供的源码都只是玩具而已,不能用的,TCP打洞较成功的例子我看看了,就数XSTUNT了,其他的也许没发现。

打洞是需要多机器来测试的,尤其是TCP,”同步协调“,”多次“ ”循环“ 这几个词挂耳边,不经过具体大型系统实践的人说出来都是空话,我们的系统TCP穿透基本参考XSTUNT实现,效果还可以,所以我也不需要多做太多额外的工作,就写这么多,

后面还要总结KAD 的东西。

作者: Chriss    时间: 2016-10-17 01:19
厉害了我的歌
作者: E丶JavaScript    时间: 2016-10-17 09:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 网上邻居007    时间: 2016-10-17 13:36
好象不错啊
作者: 爺受亽跪拜    时间: 2016-10-18 15:48
好象不错啊
作者: 网上邻居007    时间: 2016-10-18 17:48
很好很强大啊
作者: bachelor88    时间: 2016-10-19 20:50
看着很厉害的样子,学习下。
作者: skyddr8511    时间: 2016-10-20 00:12
看着很厉害的样子,学习下。

作者: skyddr8511    时间: 2016-10-20 00:12
看着很厉害的样子,学习下。

作者: Tz勿忘心安    时间: 2016-10-20 16:14
支持开源~!感谢分享
作者: aidexinhao    时间: 2016-10-23 02:51
好像很厉害哦
作者: 260350    时间: 2016-11-23 19:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: go2245    时间: 2016-12-19 20:54
收下了!!!!
作者: 小秋秋呀    时间: 2017-3-3 19:08
来看看源码咯 学习学习




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4