断点调试的过程: 
cnt = recv( stcpactive, (char*)precvbuf+i, recvdatalen-i, 0 ); // 接收数据,此时precvbuf[0]=0,st:"CXX0017:Error:"str" not found
CString   str; //precvbuf[0]=16448,st:"CXX0017:Error:"str" not found
        
str.Format("%d",precvbuf[0]);//无变化rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));//无变化

解决方案 »

  1.   

    调试一下,precvbuf缓冲区里面的数据正常吗??
      

  2.   

    precvbuf不就是缓冲区吗?不好意思,我这是修改的别人的程序,对VC比较陌生。precvbuf[0]=16448这个数据都有了,还能有问题吗?
      

  3.   

    // NetWatcherViewerDoc.cpp : implementation of the CNetWatcherViewerDoc class
    //#include "stdafx.h"
    #include "NetWatcherViewer.h"#include "NetWatcherViewerDoc.h"
    #include "comdef.h" 
    #include "Excel.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif//ports
    #define DATAPORT 45000#define BUFFLEN 1024*2048
    //recv data buff
    int precvbuf[16384*4];int pChannel1_Buf[16384*4];
    int pChannel2_Buf[16384*4];
    int pChannel3_Buf[16384*4];
    int pChannel4_Buf[16384*4];
    int pChannel5_Buf[16384*4];
    int pChannel6_Buf[16384*4];
    int pChannel7_Buf[16384*4];
    int pChannel8_Buf[16384*4];//Recv image data thread
    UINT Recvdata(LPVOID pParam);
    _Application ExcelApp;
    Workbooks wbsMyBooks; 
    _Workbook wbMyBook; 
    Worksheets wssMysheets; 
    _Worksheet wsMysheet; 
    Range rgMyRge;  ; /////////////////////////////////////////////////////////////////////////////
    // CNetWatcherViewerDoc construction/destructionCNetWatcherViewerDoc::CNetWatcherViewerDoc()
    {
    // TODO: add one-time construction code here
    int i;
    m_bRecvFlag = TRUE;//FALSE
    m_uiUploadFormat = 0; //raw data
    m_uiViewChannelID = 1; //first channel
    for( i=0; i<8; i++){
    m_uiShowType[i] = 1; //1: raw data; 2: fft result
    }
    for( i=0; i<8; i++){
    m_iOrgDatalen[i] = 16384;
    }
    for( i=0; i<8; i++){
    m_iFftDatalen[i] = 16384;
    } // start sub recv thread
    m_pRecvThread=AfxBeginThread(Recvdata,this);
    if(m_pRecvThread==NULL){
    AfxMessageBox("Listening Socket Error");
    }
    //创建Excel 2000服务器(启动Excel) 
    if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 

    AfxMessageBox("创建Excel服务失败!"); 
    exit(1); 

    ExcelApp.SetVisible(false); 
    //利用模板文件建立新文档 
    char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);
    CString strPath = path;
    strPath += "\\template";
    wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); 
    wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));
    //得到Worksheets 
    wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
    //得到sheet1 
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
    //添加模板个数
    for(i=0;i<4;i++){
    wsMysheet.Copy(vtMissing,_variant_t(wsMysheet));
    }
    CString str1;
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
    str1 = "通道1";
    wsMysheet.SetName(str1);
    for(i=0;i<wssMysheets.GetCount()-1;i++){
    wsMysheet = wsMysheet.GetNext();
    str1.Format("通道%d",i+2);
    wsMysheet.SetName(str1);
    }
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("通道2")),true);
    //得到全部Cells,此时,rgMyRge是cells的集合 
    rgMyRge.AttachDispatch(wsMysheet.GetCells(),true); 
    //设置1行1列的单元的值 
    //CString str="16384";
    //CString str=_TEXT("16384");
    //rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str)); 
    //rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t(str));
      //rgMyRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t(str)); 
    //rgMyRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t(str)); 
    //rgMyRge.SetItem(_variant_t((long)6),_variant_t((long)1),_variant_t(str)); 
    //rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)1),_variant_t(str)); 
    //rgMyRge.SetItem(_variant_t((long)8),_variant_t((long)1),_variant_t(str)); 
    //rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)1),_variant_t(str));
    //将表格保存
    strPath = path;
    strPath += "\\ReceiveData.xls";
    wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
    //ExcelApp.SetVisible(true); 
    //wbMyBook.PrintPreview(_variant_t(false)); 
    //释放对象 
    wbsMyBooks.Close(); 
    rgMyRge.ReleaseDispatch(); 
    wsMysheet.ReleaseDispatch(); 
    wssMysheets.ReleaseDispatch(); 
    wbMyBook.ReleaseDispatch(); 
    wbsMyBooks.ReleaseDispatch(); 
    ExcelApp.ReleaseDispatch(); 
      //exit(1); 

    }
    /////////////////////////////////////////////////////////////////////////////
    // CNetWatcherViewerDoc commands///////////////////////////////////////////////////////////////////////////////
    // Sub Threads
    ///////////////////////////////////////////////////////////////////////////////
    UINT Recvdata(LPVOID pParam)
    {
    //监听DSP数据的线程
    CNetWatcherViewerDoc* pDoc=(CNetWatcherViewerDoc*) pParam;
    WORD wVersionRequested;
    WSADATA wsaData;
    SOCKET stcp;
    SOCKET stcpactive;
    struct sockaddr_in sin1;
    UINT i,j,size;
    BOOL flag = TRUE;
    UINT channelID,recvdatalen;
    UINT channelflag;
    int *ptmp;
    TrgRecvRestart: wVersionRequested = MAKEWORD(1, 1);
    i = WSAStartup(wVersionRequested, &wsaData);
    if (i != 0){
    AfxMessageBox("unable to initialize WinSock for host info");
    return 0;
    } stcp = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP
    if( stcp < 0 ){
    goto leave;
    } // Create the main TCP listen socket
    stcp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//IPPROTO_TCP
    if( stcp < 0 ){
    goto leave;
    } // Set Port = IMGPORT, leaving IP address = Any
    memset(&sin1, 0, sizeof(sin1));
    sin1.sin_addr.s_addr = INADDR_ANY;
    sin1.sin_family = AF_INET;
    sin1.sin_port = htons(DATAPORT); // Bind socket
    if ( bind( stcp, (struct sockaddr*) &sin1, sizeof(sin1)) < 0){
    goto leave;
    } // Start listening
    if ( listen( stcp, 1) < 0){
    goto leave;
    } // Run until task is destroyed by the system

    int cnt;
    size = sizeof( sin1 );
    stcpactive = accept( stcp, (struct sockaddr*)&sin1, (int*)&size ); if( stcpactive == INVALID_SOCKET){
    goto leave;
    } while(1){ i = 0;
    while( i < 4){
    cnt = recv( stcpactive, (char*)&channelID+i, 4-i, 0 );
    if( cnt <=0)
    goto leave;
    i += cnt;
    if( i == 4){
    channelflag = channelID;
    }
    } i = 0;
    while( i < 4){
    cnt = recv( stcpactive, (char*)&recvdatalen+i, 4-i, 0 );
    if( cnt <=0)
    goto leave;
    i += cnt;
    }
    if(channelflag>8){
    pDoc->m_iFftDatalen[channelflag-8] = recvdatalen;
    recvdatalen *= 4;
    }
    else{
    pDoc->m_iOrgDatalen[channelflag-1] = recvdatalen;
    recvdatalen *= 4;
    } i = 0;
    while( i < recvdatalen ){
    cnt = recv( stcpactive, (char*)precvbuf+i, recvdatalen-i, 0 );
     

    //char* str;
            //sprintf(str,"%x",precvbuf[0]);
    //CString   str; 

            //str.Format("%d",precvbuf[0]);

            char  str[8];   
    memset(str,0,sizeof(str));
            itoa(precvbuf[0],str,8);   
            //str=str+"\0";
    //CString str=char(precvbuf[0]);
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));  if( cnt <= 0 )
    goto leave;
    i += cnt;
    if(i == recvdatalen){
    //
    switch(channelflag){
    case 1:
    ptmp = precvbuf;
    pDoc->m_uiShowType[0] = 1;
    for( j=0; j<recvdatalen; j++){
    *(pChannel1_Buf+j) = *(ptmp+j);

    }
    break;
    case 2:
    ptmp = precvbuf;
    pDoc->m_uiShowType[1] = 1;
    for( j=0; j<recvdatalen; j++){
    *(pChannel2_Buf+j) = *(ptmp+j);
    }
    break;
    default:
    break;
    }
    PostMessage(pDoc->m_hTermWnd, WM_RECVDATAOK, pDoc->m_uiViewChannelID, 0);
    }
    } }leave:
    // We only get here on an error - close the sockets
    if( stcp >= 0 ){
    closesocket(stcp);
    } WSACleanup();goto TrgRecvRestart; return 0; 
    }