不是啊,我不是loop until data over了吗 一次从文件读取MaxDateLength个字节发送
你再Loop前开Buffer,Loop Finish后再释放
可能是我没说清楚,是这样 While data not over Do GetMem for Buffer Read Data from file into Buffer Socket.SendBuffer FreeMem(Buffer) end; to redwoodnymph(红蜂鸟) 是不是想说Getmem和Freemem占用了太多的时间,我试了一下,这两个操作非常快,几乎不耗时。用GetTickCount计算操作之间的差值一直是0,我想不是这里的问题。
终于搞定了。 kofxdm(八稚) 你说的不太正确。后来我去一些国外的论坛上看到另一种处理方式。 server采用阻塞模式(因为有可能同时给多个客户发文件,每个连接请求创建一个线程处理),而客户端使用非阻塞模式--但如果客户端也要同时接收多个用户的文件那也必须在线程中处理。(此线程的执行代码实际上是一个空循环,由于是在线程中的循环,并不会导致程序其他操作的运行) 接收文件时利用clientSocket的onread和ondisconnect事件。 onread下创建buffer,然后调用Readbuffer,接着保存数据,释放buffer 但是要注意一点,delphi的文档描述如下 Note: Non-blocking sockets do not always receive an OnRead event for the last bit of data passed over the connection. When using a non-blocking socket, check for any unread data in the OnDisconnect event to make sure that everything is handled. 所以还要在ondisconnect里在做一个onread里的事情。就ok了。 后来发一个8M的文件,算上显示进度条,保存文件等收尾操作一共用了16秒 就是它了。这下可以找mm去了。但愿还没被人拐走。呵呵来者有分!!!不会让大家白辛苦的。
如果是这样的话,你把它分成几份,分几次发送试试
一次从文件读取MaxDateLength个字节发送
While data not over Do
GetMem for Buffer
Read Data from file into Buffer
Socket.SendBuffer
FreeMem(Buffer)
end;
to redwoodnymph(红蜂鸟)
是不是想说Getmem和Freemem占用了太多的时间,我试了一下,这两个操作非常快,几乎不耗时。用GetTickCount计算操作之间的差值一直是0,我想不是这里的问题。
我用icq发送(UDP)8M只用了17秒。
在TCP上的传输很多,Smtp、rpc什么的,都挺快的啊。
是不是Socket的Buffer太小(这里的Buffer是指Socket的,不是我读取对文件数据时键的buffer)。可是在delphi里怎么设置这个buffer呢。
我以前也是用Dephi5做的,差点搞的吐血也没有搞好,用了DELPHI6一天就OK了。
kofxdm(八稚)
你说的不太正确。后来我去一些国外的论坛上看到另一种处理方式。
server采用阻塞模式(因为有可能同时给多个客户发文件,每个连接请求创建一个线程处理),而客户端使用非阻塞模式--但如果客户端也要同时接收多个用户的文件那也必须在线程中处理。(此线程的执行代码实际上是一个空循环,由于是在线程中的循环,并不会导致程序其他操作的运行)
接收文件时利用clientSocket的onread和ondisconnect事件。
onread下创建buffer,然后调用Readbuffer,接着保存数据,释放buffer
但是要注意一点,delphi的文档描述如下
Note: Non-blocking sockets do not always receive an OnRead event for the last bit of data passed over the connection. When using a non-blocking socket, check for any unread data in the OnDisconnect event to make sure that everything is handled.
所以还要在ondisconnect里在做一个onread里的事情。就ok了。
后来发一个8M的文件,算上显示进度条,保存文件等收尾操作一共用了16秒
就是它了。这下可以找mm去了。但愿还没被人拐走。呵呵来者有分!!!不会让大家白辛苦的。