我用Tclientsocket实现了文件的发送,本来可以找mm聊天去了,后来发现。。。
发一个8M的文件用了45秒,平均每秒还不到200K,我真是郁闷了,tcp连接、
局域网,怎么会是这个速度,我想可能是代码有问题,就去查
发送方:
loop until data not over
GetMem(bufSend,MaxDateLength);//开辟buffer
MemoryStream.Read(bufSend^,MaxDateLength);//从MemoryStream中读取MaxDateLength个字节,MemoryStream存放了文件内容
ClientSocket.SendBuf(bufSend^,ActBytes);//发送
FreeMem(bufSend,MaxDateLength);//释放buffer
end;//end loop
接收方:
使用了WinSocketStream
loop until data not over
Stream := TWinSocketStream.Create(ClientSocket.Socket,8000);
Try
if Stream.WaitForData(8000) then
begin
GetMem(Bytes,MaxDateLength);//开辟buffer
I := Stream.Read(Bytes^,MaxDateLength);
fsData.Write(Bytes^,I);//写入文件流
FreeMem(Bytes);//释放buffer
。。。
Stream.free
end;//end loop
看了半天也没觉得有什么不对,难道MaxDateLength太小了?于是我把MaxDateLength从1K到1M试了个遍
还是不行。后来加入log,发现SendBuf越执行越慢,最长一次用了6秒,MemoryStream.Read(bufSend^,MaxDateLength)这一句很快。
后来我又想,是不是Socket的缓冲区太小了,改大一定应该就可以了,结果找了半天delphi的帮助,竟然没发现有这个属性?!!
后来调API,SetSocketOpt,拼命报错。我实在没辙了,诸位CSDN的老大,帮帮忙。救我于水深火热之中吧。