我的接收函数是如下实现的:
GuoDianHeaderStru m_guoDianHeaderStru;  //GuoDianHeaderStru是一个结构体
char tempbuf[1024];
ZeroMemory(tempbuf,1024);
memcpy(&m_guoDianHeaderStru,&tempbuf,1024);
m_ClientSocket->Receive(tempbuf,1024);
为什么我始终只能收到前10个字节的数据,后面的都是错误的信息????

解决方案 »

  1.   

    你好,我按你说的方法去实现如下:
    GuoDianHeaderStru m_guoDianHeaderStru;
    char tempbuf[1024];
    ZeroMemory(tempbuf,1024);
    int len;
    memcpy(&m_guoDianHeaderStru,&tempbuf,1024);
    while(1){
    len=m_ClientSocket->Receive(tempbuf,1024);
    i(len>=m_guoDianHeaderStru.cStartChar1+8+m_guoDianHeaderStru.unionLen1.uUserDataLen)
    break;
    }
    这样实现对吗?怎么 还是无法得到正确结果,所有数据显示为0
      

  2.   

    你的包多大?,建议一个包小于4K吧
    循环的buf要相加才行
      

  3.   

    你要接收一个固定的机构体是吧
    如果结构体固定且不大(小于4k最好),直接在客户端服务器程序都包含GuoDianHeaderStru.h
    发送方用 send((char*)&m_guoDianHeaderStru,sizeof(GuoDianHeaderStru));
    接收方用 Receive((char*)&m_guoDianHeaderStru,sizeof(GuoDianHeaderStru));
    直接传结构体就可以了,不然的话,你就算接收到一个BUF里面,还是牵涉到要分割字节流的问题。直接发送结构体比较清晰而且方便
      

  4.   

    GuoDianHeaderStru m_guoDianHeaderStru;
    char tempbuf[1024];
    ZeroMemory(tempbuf,1024);
    int readlen,totallen;
    memcpy(&m_guoDianHeaderStru,&tempbuf,1024);
    readlen=totallen=0;
    while(1){
    len=m_ClientSocket->Receive(tempbuf,1024);
    tatallen+=len;
    memcpy((&m_guoDianHeaderStru+totallen,&tempbuf,len);
    i(len>=m_guoDianHeaderStru.cStartChar1+8+m_guoDianHeaderStru.unionLen1.uUserDataLen)
    break;
    }
      

  5.   


     是接收http数据吗? 用 ActiveX控件吧: http://www.languangav.com/soft/product_down.htm