18,356
社区成员
发帖
与我相关
我的任务
分享
struct SBRIEF
{
char cmd; // 要干什么
UINT unBytes; // 后面要发送的数据有多少字节
};
struct SDIRFILE
{
wchar_t szName[MAX_PATH]; // 目录/文件名
bool bDir; // 是否是目录
};
struct SPUTDIRLIST
{
char szDirPath[MAX_PATH]; // 新数据所属的目录路径
UINT uCount; // 新数据的记录条数
SDIRFILE* pDirFileArray; // 新数据的记录数组
};
struct STHREADPUTDIRLIST
{
SBRIEF brief;
SPUTDIRLIST putDirList;
};
// 首先,准备好欲发送的数据
CString strPath(TEXT(""));
SDIRFILE* pDirFileArrayTmp = g_dirSys.GetDirFileArray(strPath);
int nCount = g_dirSys.GetArrayElemCount();
// 拷贝到新的缓存,防止被多线程修改
SDIRFILE* pDirFileArray = new SDIRFILE[nCount];
for(int i=0; i<nCount; ++i)
{
pDirFileArray[i].bDir = pDirFileArrayTmp[i].bDir;
wcscpy(pDirFileArray[i].szName, pDirFileArrayTmp[i].szName);
}
// 这里本来是构建结构体,令启动一个发送线程发送的,为了简化描述,直接在本线程发送
STHREADPUTDIRLIST* lpParameter = new STHREADPUTDIRLIST;
lpParameter->brief.cmd = CMD_PUT_DIR_LIST;
lpParameter->brief.unBytes = sizeof(SDIRFILE)*nCount+sizeof(UINT)+MAX_PATH;
lpParameter->putDirList.uCount = nCount;
strcpy(lpParameter->putDirList.szDirPath, "");
lpParameter->putDirList.pDirFileArray = pDirFileArray;
SBRIEF* pBf = &(((STHREADPUTDIRLIST*)lpParameter)->brief);
SPUTDIRLIST* pPdl = &(((STHREADPUTDIRLIST*)lpParameter)->putDirList);
if( !g_tcpSock.Send((char*)pBf, sizeof(SBRIEF)) )
{
cout << "send error!" << endl;
}
// 在这里老是有10014错误,MSDN上解释:The buf parameter is not completely contained in a valid part of the user address space.
if( !g_tcpSock.Send((char*)pPdl, pBf->unBytes) )
{
cout << "send error!" << endl;
}