关于网友提出的“ 帮帮忙问个关于 TServerSocket 和 TClientSocket 的问题”问题疑问,本网通过在网上对“ 帮帮忙问个关于 TServerSocket 和 TClientSocket 的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 帮帮忙问个关于 TServerSocket 和 TClientSocket 的问题
描述: RT ... 现在要做一个上传的模块,打算用这两个组件来实现..可是从来没用过这两个东东,也没搞过网络编程这方面的东西....
现在有些问题问下.各位达人帮帮忙...
1.客户端要求是每个文件支持多线程上传,要求线程数可配置.(即如果有多个用户同时上传,则为每个用户单独开一线程来接收)
2.客户端要求能支持断点续传功能,客户端再连接到网络的时候自动把还没传完的文件传完.
3.客户端连接到服务器端的时候会进行身份认证而且客户端的登录帐号和密码是加密.
4.客户端发到服务端的文件需要进行文件数据完整较验.如果失败通知客户端重新发送文件,服务器端会把不完整文件删除.
5.服务器接收的并发数可配置,最高要求1000个.
6.服务端要做好统计数量的接口,统计项目如下:上传/下载速度(KB/S),已上传的文件大小(KB),登录上传的用户名,上传的文件路径.文件传输完共用的时间,上传文件的日期和时间
7.端口监听和释放,即其中一个用户传输完毕,则释放相应的端口.
-------------------------------------------------------------
真诚的请教各位....如果有实现过,麻烦帮忙说一下其中的原理,比如多线程的创建和调用,当有用户发出请求时就要创建一个线程.都要注意些什么,具体的代码我想自己实现
分不够再加.....
解决方案1: 以前构思过一个类似的系统,不过没有去实现
大致的想法是:
服务器有一个公开端口用来监听请求,比如5000.客户端连接都往5000这个端口发送连接请求.服务器端验证并且通过后,创建线程,线程里bind一个新的空闲端口,比如40000,并给客户端回消息让客户端更改服务器通讯端口.线程启动后,客户端实际是与服务器的40000端口在通讯,而主线程继续监听5000端口.
linux下socket通讯很多都是这样做的,只不过linux下是fork出一个进程来处理,而delphi里一般创建线程来处理.
端口冲突你不用担心,可以让系统自动分配可用端口.
实际上你应该不用担心要在服务器维护一个庞大的客户端列表.idtcpserver本身就可以支持与多个客户端通讯,所以你可以给每个客户端创建一个idtcpserver,这样每个客户端的多线程也可以解决.
解决方案2: 11点54分发帖,11:59分,回帖超过18个。
有源码有实例还有解释。
解决方案3: 让那些出 20 分和发在非技术区的的人看看 200 分的帖子是什么效果!
解决方案4: STUDY
解决方案5: 200分的问题果然有料...
在这个问题上,建议楼主一步步实现。不要想着一次性完全做好。
第一步实现简单上传,一个用户对应一个连接,同时一个文件,并做好相应的其它功能,包括日志等等。对于客户端来讲,多线程,其实就是多个连接,也就是需要多个TClientSocket来参与。这个只是把原来单一的一个,复制成了多份,然后放在不同的线程里。
第二步,断点,也就是分段。
第三步,对多个连接增加一个登录标识,就好象是原来多个连接的一个客户,进行了一个统一地计划,而划分到一个连接组当中,当然最方便的方法就是为同时在传输同一个文件的多个连接划分在一起。
解决方案6: 楼上很厉害,值得学习。
解决方案7:
当客户端连到服务器时,服务器程序可以把不同连接到的IP存起来。IP的个数就是连接的个数。如果要限制连接就,看IP数据是不超过了
最大允许数;如果超出就给客户机返回一个状态告诉客户机已经不能连了,同时结束其它操作.
我想用户名和密码的验证应该很容易就搞定了吧?! 至于连接还是断开,只是给客户机返回两种不同的状态而已。
断点续传,其实可以简单的实现: 客户机每次发文件数据包给服务器的时候,带上数据体的大小和在文件中位置的信息,服务器在接收时,
以这个数据体的大小及位置信息写到相应的接收文件中就可以了。
注:再实现的时候用Indy的idTcpServer和idTcpClient控件来作,这样在服务器返回要好实现一点(直接在idTcpServer.OnExecute
事件里就要实现)。
解决方案8: 1.把TClientSocket控件的创建和连接都写到线程里去
2.可以这样,如果只有一个线程的话,从文件的开始下载,下载长度为文件的长度,如果已经存在一个线程的话,从文件的中间下载,然后把前一个线程要读取的长度告诉给第一个线程,即第一个文件要下载的长度为文件长度除2,依次类推,这是动态的。不过一般不这样进行。
3.预先定义好要创建的线程数,然后把要下载的文件分成几部分,分别下载,下载完成后把分别下载的部分合并
4.如果断点续传的话,首先判断有几个线程,方法是查找有几个文件即可,然后把要下载的文件分成几个部分,判断各个线程文件的长度,即得要要下载的起始位置,然后每个线程关联一个文件,从起始位置开始下载指定的长度即可,最后合并
以上介绍了“ 帮帮忙问个关于 TServerSocket 和 TClientSocket 的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3667773.html