CAnsySocket很急的问题[以下问题以源码说明最好,小弟不胜感激]
1.我如果发送大量的数据?如400MB,send好像放送的大小是有限的吧...
如果要分包数据,我得如何作?2.我在
服务器方:
CString msg = "aaaabbbb";
pCC->Send((char*)(LPCTSTR)msg,msg.GetLength());
msg="ccccdddd"
pCC->Send((char*)(LPCTSTR)msg,msg.GetLength()); 客户端:
void CL::OnReceive(int nErrorCode) 
{
char buf[4];
int iLen=Receive(buf,4);
buf[iLen]='\0';
AfxMessageBox(buf);
CAsyncSocket::OnReceive(nErrorCode);
}
服务器放出信息后客户端会多次连继触发OnReceive
第一次:收到"dddd"
第二次:收到"cccc"
第三次:收到"bbbb"
第四次:收到"aaaa"
并没有区分开是在服务方有两次send.

解决方案 »

  1.   

    关于第二问的建议:在服务器端,每用一次send()就用一次flush(),把缓冲区清空.
    这样客户端就可以区分.
    第一个问题,是不是只是把缓冲区设大一些?
    如有人回答,可否给我一份答案.
    [email protected]!
    以后有问题可以联系!
      

  2.   

    你用基于TCP的传输方式,不用管缓冲区的问题,系统会自己分解,打包发送!
      

  3.   

    第一问:
    只需自己设定合适的缓冲区,不必理会系统如何处理。
    第二问:
    对服务器方的一次Send(),客户端可能会多次OnReceive(),你可以不用管他,只需将每次OnReceive()的数据拼在一起即可。至于什么时候结束,应该自己设定一个标志,客户端收到该标志后即表明传输完毕。
    另:你给出的结果与你的程序不符。