断点调试的过程:
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));//无变化
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));//无变化
//#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;
}