一个基于socket的资源共享平台的实现(一)
来源:互联网 发布:人工智能的技术原理 编辑:程序博客网 时间:2024/06/06 04:46
前段时间和朋友一起做了一个类似于电驴、迅雷 + MSN工具的毛坯模型,基本上所有功能都是从socket通信级别向上实现。
整体架构为C/S架构,使用MFC实现。技术上都是很老的东西,此文主要介绍类似于 电驴 的这样一个软件的设计思路和部分代码框架。
我们实现的代码不是很优化,仅为设计思路的佐证。
我最初做这个小软件的想法是,方便一个小型网络中大家的资源共享和交流。
每个人都能共享出自己的一部分文件,当然这个可以通过WINDOWS的共享文件夹或者LINUX的SAMBA实现,不过假如在我并不知道共享源的情况下,就很难获得资源了。有人说,直接在WINDOWS的网上邻居里可以看到局域网上大家共享的资源,但是我发现可能由于各种网络设置的关系,在网上邻居里我经常看不到其他人共享的资源。
于是当时我用WINDOWS的几个API,(忘了具体是什么了,可以探测和遍历他人共享目录),写出来效果也很不好,第一很慢,第二还是收不全,第三不可控,其封装度太高,隐藏N多技术细节。
于是后来我想,还是基于socket,从底层做起。
在不知道源的情况下,我们如何探测、收集到各个源的共享资源呢?—— 答案很快浮出水面,弄一台服务器,大家都连接服务器,告诉它自己这儿的资源情况,然后大家统一从服务器查询网络上的共享资源,然后建立客户端的点对点连接传输文件。
程序的整体架构很简单,下面本文的主旨在于一步步的告诉大家在此软件实现中的一些要点。
1. 内部协议
我们的客户端需要与服务器端“交流”,就得有一套系统内部能被互相识别的语言,这样一套协议完全可以咱们自己设计。
我在实现中采用的UDP通信,每个UDP包 头一个字节为 指令字节,其后按照每个指令的格式跟接参数。例如我的“内部协议”部分代码:
如果直接在网络上发送明文,则很容易被别人使用抓包工具抓取,稍加分析则可理解其中的内容,然后别人可以模拟写客户端或者程序来非法访问、攻击你的服务器端和别的客户端。所以这里应该要使用加密算法,在网路上传输加密数据。在我的“毛坯”程序中没有实现这一点,不过,这在互联网上发布的任何一款商用通信程序都是必须的。
2. TCP文件传输及传输群管理。
在一方申请下载的时候,另一方应该响应该请求,为它建立TCP连接。前者我们称TCP客户端、后者为TCP服务端。基于我们的“共享”的思想,每个客户端程序都可能作为TCP客户(下载资源)或者TCP服务器(提供资源下载),同时服务器端也可以作为TCP服务器(发布客户端自动升级包)。
那么我们总结核心思想就是,不管客户端还是服务器端,都应该有一个tcp listener,不断的监听网络上到来的TCP请求,每当过来一个请求时,与其建立连接,并且单独增开一个线程与其通信进行文件传输——我把这个机制叫做TCP文件传输群管理。
传输群管理应该包括以下几点
1. 侦听请求,建立连接;
2. 为连接增开线程;
3. 控制传输服务;
4. 结束传输,关闭线程。
下面给出我们传输群管理的核心部分代码:
大致说明一下,TCPServerManager为传输群管理,每次有连接单独启动一个TCPTaskManager作为TCP传输的容器类,负责管理一个TCP传输任务。
未完待续。。。。
- 一个基于socket的资源共享平台的实现(一)
- 一个基于socket的资源共享平台的实现(二)
- 一个基于socket的资源共享平台的实现(三)
- 一个基于socket的资源共享平台的实现(四)
- 基于LAN的资源共享
- 基于TCP的socket通信,实现加减乘除(方法一)
- Android 基于Socket的聊天室(一)
- Mesos:数据中心细粒度的资源共享平台
- 一个基于Socket的http请求监听程序实现
- 基于Socket编程实现一个简单的Web服务器
- 网络编程 基于Socket的多文件传输程序实现(一)
- 基于Loadrunner平台Socket协议的JavaVuser(多线程)
- 基于C++ Builder 5的Socket组件实现的聊天程序(一)
- 基于Java Socket的自定义协议,实现Android与服务器的长连接(一)
- 基于Java Socket的自定义协议,实现Android与服务器的长连接(一)
- 基于socket的ftp实现
- 基于Udp的socket 实现
- (五十七)线程的资源共享、单例的实现
- jsp绝对路径
- ubuntu 安装显卡驱动
- 算法复杂度分析
- hdu1166 敌兵布阵
- 海量数据处理方法总结
- 一个基于socket的资源共享平台的实现(一)
- 长发变短发,卷发变直发,坚持每天梳头
- 面试系列: 办理档案调入调出--最郁闷的一天
- 期刊排名与评价
- C 笔记 输入输出
- ntp原理及客户端实现
- Pku 1080 Humman Gene Function 解题分析
- 关于Eclipse中工程关联依赖的部署配置问题
- 17句伤感青春感言,哪一句说到了你的痛处?