以TCP协议当中,由于TCP协议的特点就是保障性,所以在这个传输过程当中,网络可能存在着间隔空隙时间,所以一次一个文件的传输未必达得到最快,从而允许多文件同时传输(当然,如果传的太多了,由于网络带宽被分配掉,单个文件来说,它的传输速率会随之下降).由于TCP每个连接当中的传输是保障顺序性的,所以要传输多个文件就得开出多个连接(楼楼楼...上有说过每个进程一个连接,其实这种说法不知道是打了个错字,还是对进程和线程的概念不清析,当然也并不是说一进程一连接不可以,只是那样子相比使用多线程来说实在是一种浪费^_^).TCP的服务器端每接受一个连接就会得到一个不同的SocketHandle(SOCKET,相当于ListenSocket的一个服务Session,与ListenSocket有着极密切的关联,继承了ListenSocket的相关信息,同时由于是从属于ListenSocket的一个Session,所以它的关闭不对于ListenSocket产生影响,但是ListenSocket的关闭会有所影响),从而可以从中识别出来,各数据属于谁谁谁(假设使用的是非阻塞模式^_^).此时就已经完成了一个多线程(多文件)的传输模型.但是这当中又存在一个问题,就是用户可能会由于某种原因需要取消传输.在这个问题上,原来在BSD当中考虑使用一种超前(超优先级)控制包(OOB Data,Out of Band Data,发送send或接受recv时flag参数带MSG_OOB),从而达到控制,但是由于这种数据包的特殊性,就很可能被Hacket利用(甚至在此之前还有针对如Win95的139端口等进行OOB攻击的DoS软件^_^),从而不再建议使用.为了解决楼主所提出来的问题,建议在每一次连接即在传输文件前连接作为"命令连接"(职业用来传输命令的一条链路)用以发送控制信息(有点类似于FTP的那种意味^_^),而后传输文件另外连接,这样子当需要取消某个传输时,可以直接closesocket来关闭文件传输的连接,并同时从"命令连接"发送控制信息,用以取消在服务器端所分配下的资源.
还有是多个文件同时传送。
也许服务端把所选的文件全部读到一个文件流中,然后向不同的客户端发送?但是多个客户端能够连接同一个服务端的端口?很多我不是很清楚还请指教。我的qq254527732
一个服务端会针对每个客户端启一个进程,然后建立一个文件流。
各个客户端分别传它们各自负责的文件。
如果你的客户端只有一个,但又想同时传多个文件的话,应该在客户端启多个进程,每个进程一个idtcpclient,向服务端发起连接,并传送文件,一个进程负责一个文件。不鸡道我说明白了木
erhan(二憨) 说的基本上没错
按照上面的说法,我是不是应该在IdTcpServer的onconnection时间里面建立文件留和传输文件给客户端?还有我是serevr传 client的。那位大哥最好能够给我的demo。小弟先在这谢谢了。
假如一个文件已经开始传输了,同时我又想向同一个客户端传输另文件我应该怎么做?
是直接创建文件流,然后发送?关键是这些代码我应该写在什么地方?
我写在onexcute里面不行啊,他还是要等前一个文件传完了才有反映。还有多个文件流要怎么定义才能够实现?
首先很感谢你的回复,其实我也基本上是按照你那么做的。但是中间出了些问题。
1。我也是每个文件传输开始时,先发一个通讯包,包括以下内容:文件大小、文件名、文件编号,其中文件编号为标识每个文件的唯一编号。
2。等收到接收方的同意接收信号后开始传输,这样的话传一个文件很正常,现在的关键问题是如何处理当已经有文件正在传输又想开始传输其他的文件。
请指教!!
改为client 传 server不就行了多加两个控件而已
demo在idtcpserver的onconnect事件把一些东西保存进了线程的data里面,但是那些都不是客户端 传过去的信息。请问我是不是要换其他的控件来把信息先传过去?信息包括文件的id,name,size
好象:sever向-->多个client也可以,多个client-->server也可以到底哪个好操作一些呢?
谢谢。