关于使用CSocket进行文件传输的问题

zheng8071 2005-09-11 01:15:25
本人需要些一个是文件传输的程序,我已经用CSocket实现了单个文件的传播,就是在服务器端选择一个文件,然后点击发送,客户端就会收到这个文件。现在的问题是我在服务端点击文件发送后,客户端能够收到文件,但是总会包一个内存不足的错误我的基本实现原理是在server:
...
for(int i=0;i<=myFileLength;i+=1024)
sockRecv.Send(data+i,1024); //Send the whole thing now
if(myFileLength%1024!=0)
sockRecv.Send(data+myFileLength-myFileLength%1024,myFileLength%1024);
...

client:接收函数主要代码
Receive(){
...
for(int i=0;i<=dataLength;i+=1024)
sockClient.Receive(data+i,1024); //Send the whole thing now
if(dataLength%1024!=0)
sockClient.Receive(data+dataLength-dataLength%1024,dataLength%1024);
...
}


在客户端用了一个网络事件侦听客户端的动作
WSAAsyncSelect(ServerSocket,m_hWnd,WM_CLIENT_READCOLOSE,FD_READ|FD_CLOSE);
当服务器端send 的时候客户端就被通知然后调用接收函数,我有点怀疑是不是在server端的文件循环中每send一次,都会触发客户端的侦听函数调用一次接收函数Receive();还有,我需要server端向client端传送数据与命令,不知如何再send和receive中区分开来,请高手指教
网上的一些程序例子都是只说了怎么样传一个文件,我如果要一次传送多个文件该怎么办呢
...全文
277 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_noname 2005-09-26
  • 打赏
  • 举报
回复
http://www.codeproject.com/internet/SocketFileTransfer/TransferFiles_demo.zip
wangrb 2005-09-26
  • 打赏
  • 举报
回复
to:
搂主,希望得到全部代码,不知道如何传输一个(多个)文件
nuaawenlin 2005-09-17
  • 打赏
  • 举报
回复
Receive(){
...
for(int i=0;i<=dataLength;i+=1024)
sockClient.Receive(data+i,1024); //Send the whole thing now
if(dataLength%1024!=0)
sockClient.Receive(data+dataLength-dataLength%1024,dataLength%1024);
...
}
////////////////////////////////

接收数据的时候,不必要开那么多的缓冲区,一个就够了,收到数据之后,直接写文件就可以了,不必要等接收到全部文件之后再写文件
rageliu 2005-09-17
  • 打赏
  • 举报
回复
传多个和一个应该是一样的!!
每次传一个!开始和结束都要 有你自己定义的标志符,这样就可以分开不同的文件了
zxyjyzxyjy 2005-09-17
  • 打赏
  • 举报
回复
对于发送长文件,我是这样做的。首先建立起连接,然后发送一个头,说明要发送的文件的基本信息,然后分几次发送这个文件,当发送完后,我再发一个结束信息。在接收端,按同样的步骤进行接收,接收端可以根据头里人信息来分配内存。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧