大文件用socket传送的问题(100分)

  • 主题发起人 主题发起人 hly
  • 开始时间 开始时间
H

hly

Unregistered / Unconfirmed
GUEST, unregistred user!
1。本人想用serversocket和clientsocket写一个文件传送的程序
程序是写好了,我用的TMemoryStream,SendStream,ReceiveBuf.
但是只能传送小于8M以下的文件,大于8M就报错(内存溢出)
由此可得知TMemoryStream是把整个文件都读到内存中在发送和接收的(和本人及其内存多少有关)
我现在想传送大于8M或者说把我光驱中的vcd文件(500多兆)传送出去该怎么做呢?
2。如果服务器端断开连接(server.close),客户端怎样知道呢?反过来,如果客户端断开,服务器怎样知道呢?
3。我想把我写的程序进一步完善成多个客户端同时发文件,一个服务端都可以接收。
我知道服务器端要用到线程,理论上很清楚(客户端发一个请求,服务器端创建一个线程和这个客户端
打交道,自己回去监听端口,如此反复。。。)我没有写过有关线程的程序,请问打虾,谁有
这方面的程序和资料啊(Email:honglueyihzg@sina.com)小弟感激涕零了。
分是少了点,我赚一分好艰难啊,请打虾们理解!
 
1 用TFileStream
2 建议你用Indy控件
3 Indy 控件有范例
 
你可以用WIN API的SOCKET 写
一点问题没有 不过我想用SOCKSERVER和SOCKETCLIENT应该也没问题的
你的信箱是多少,我发个示例给你
 
Email :honglueyihzg@sina.com

indy控件是不是delphi6,我用的是c++builder 5
 
chrisn:
您好,能不能给我也发一个,我的EMAIL是:smj_9547@21cn.com,谢谢了!
 
分次来发,每次2048字节,然后存入Tstream中,传完后stream再savetofile(),不知道行
不?500M没试过:(
 
用FILESTREAM,传的时候用SENDBUF,一个包,一个包,一个包。。。。
我试过100多M ,没有问题
 
to:xiao_min
你说你用的filestream,我就不明白了
当你用到这句时
TFileStream * MyFilse=new TFileSteam(“e:/vcd/music01.dat”,fmOpenRead)
这条语句是把文件读入内存,是吧,我那有这么打的内存呢,如果不能装入内存
能执行sendbuf语句吗?
有不有把文件分段装入内存的函数!


 
我是用的:
var
MyFStream: TFileStream;
...
MyFStream:= TFileStream.Create(EdtFilename.Text ,fmOpenRead or fmShareDenyNone);
下面是从HELP中COPY来的:
Call Create to instantiate a file stream for reading from or writing to
the named file. Specify the name of the file and the way the file should
be opened as parameters
这只是通过MyFStream来访问一个文件,并不是把文件全取进内存
发送的时候:
GetMem(Buf,ActSize);
MyFStream.ReadBuffer(Buf^ ,ActSize);
然后把BUF的内容传出来,把BUF FREE掉,
对方接收完毕,回应后,你再读下一个包,再发
 
大文件的传送我搞定了,用的是文件函数(300多M都没问题),
第三个问题还需要大家帮帮忙啊!
 
写个断点继传的程序就是,这好象也不难,传个百八十兆的不会有问题
 
1。ongetthread
2. onthreadstart
3. onthreadend
这三个事件是什么时候触发的呀,我在什么地发创建我的线程,执行收文件的代码呢?
 
发送一个多线程的列子给我吧,我快疯了
没人回答了吗?
 
hly:
  是否可以把代码贴出来看看啊?
 
高手,出刀吧!
 
为什么我的程序执行到这句就抱错呢

TWinSocketStream *pStream=new TWinSocketStream(ClientSocket->Socket,6000);
 
to hly:
你做的不错,能传300多M,怎么我写的只能传800K,超过的话成功的概率就不大了。而且我内存也不小。

能不能把你的程序给我学学。-
我的邮箱是myron2000@263.net
 
给我一份好吗?谢谢
zhhwelcome@263.net
 
后退
顶部