关于毕业设计的一些问题

  这些时间,一直在想自己的毕业设计的实现。本来做了一个简单的。但是和自己的计划的内容相差太远了。结合网络的知识,加上编程。我想做的毕业设计有以下内容

  1:自定义协议传输文件

  2:高效率传输

  3:用户体验良好

  4:扩展性能良好

  5:层次结构明显

  计划使用的编程语言:Linux下使用C++和Java,Windows下使用C++和C#。

  C++主要做传输层业务和文件的合并业务。而在Linux下,其实可以全用C++,因为本来用C#和Java的目的其实就是写界面。但是我想弄一个有点技术含量的,所以并没有想要在Linux下要界面,给他一个配置文件。但是这样对我的Linux下编程能力是个很大的考验。

  但是这次的毕业设计主要还是在Windows 下,演示,答辩。所以还是先处理Windows下的问题。

  技术解决方案:

  1.文件监控

  2.协议定义

  3.数据传输,使用UDP,目的是 

              1)高效

              2)方便UDP打洞

              3) 减少服务器的负荷

              4)使网络资源节约

         但是使用UDP就会遇到问题,

              1)确认用户在线

              2)数据包无序,无确认

         解决方案:

              1)在定义时间内,每单位时间,向服务器发一次“Hello”包,表示自己的存在

              2)UDP是无序的,但是可以将收到的包,首先缓存在一个存储空间,在文件包完整后,由一个业务,将其组织成一个完整的文件

              3)UDP无确认,可以在自定义的协议内加确认和校验。比如现在发到底130个包,但是第69个包一直没有收到,如果当68号包收到10s后,将从新                请求这一个数据包,客户端将重新发送。在之后的数据如果还收到这个包,则直接在过滤层将其抛掉。

  4.提高效率:

      1)客户端开放三个连续的端口,第一个端口是用于接受和发送一些基本的信息,比如登录,文件的前探包(自定的,就是在每一次发送或者请求文件时,将发送一个       包,用于建立一条通道。)第二个端口是发送文件,第三个端口是接受文件。这样可以使客户端的接受和发送两不误。直接的影响是网络的带宽等的限制,软件           的影响不大。

      2)分布应用端也是一个端口是固定的监听基本信息。一旦有具体的文件请求,建立一个通道,直接在这个通道内发送数据,不再经过总的那个端口。这样可以提高         效率。一旦使用完毕,系统将收回通道,等到下一次分配。

   但是现在遇到一个问题是关于UDP的内网打洞。因为这个打洞要的是对等的NAT,而且现在有一个问题是讲过NAT之后,传出去的数据包还能获得客户端的监听端口吗?因为这些端口是随机分配的。如果可以,那样就可以解决。如果不能就需要在登录的时候就处理,在协议中直接携带端口到服务器。可以在客户端封装协议的时候,直接将端口封装进协议。这样就可以解决通过NAT传输后变化端口。但是这样有一个问题,通过NAT之后,比如我第一个端口是3330,但是第二个端口是33301,第三个是33302,首先发了一个请求包是通过3330端口发送的,这样NAT是分配的是3330的对应的端口,而建立33301的通道就不知道到底NAT会如何分配通道。

    解决方案,可以在协议中携带第一个端口,但是当通道建立好还是直接想第一个端口发送,发送的内容是过滤层的通道建立地址,这样当客户端第一个端口接收到数据,就可以按照请求的需求,通过第二或者第三个端口,想过滤服务器发送一个通道确认包,过滤端就可以获得NAT后的地址。这样就可以把通道建立起来。就可以不使用UDP打洞。用UDP通道还有一个好处好像是可以绕过防火墙之类的。

    

转载于:https://www.cnblogs.com/Pily_K/archive/2011/09/25/2189841.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值