关于socket通信IOCP方面,发送数据是不是粘包了???
第一次 客户端 发送 “111” 服务端收到 是 “111”
第二次 客户端 发送 “222” 服务端收到 是 “222”
第二次 客户端 发送 “3” 服务端收到 是 “322”
我发送第三次数据时候 接受数据这么不对啊?? 本人菜鸟希望大家指点下
顺便贴下 IOCP工作线程函数代码
//创建线程函数DWORD WINAPI ServerWorkerThread(LPVOID lpParam){ HANDLE CompletionPort = (HANDLE)lpParam; DWORD ByresTransferred; LPOVERLAPPED lpOverlapped; LPPER_HANDLE_DATA PerHandleData = NULL; //LPPER_IO_DATA PerHandleData = NULL; LPPER_IO_DATA PerIoData = NULL; DWORD SendBytes; DWORD RecvBytes; DWORD Flags; BOOL bRet = FALSE; while (TRUE) { bRet = GetQueuedCompletionStatus(CompletionPort, &ByresTransferred, //的I/O操作所传送数据的字节数 (PULONG_PTR)&PerHandleData, //用于存放与之关联的Completion键 (LPOVERLAPPED*)&lpOverlapped, INFINITE); if(!bRet) { closesocket(PerHandleData->Socket); ::GlobalFree(PerHandleData); ::GlobalFree(PerIoData); cout<< "发生错误! error" << bRet <<endl; continue; } //先检查一下,看看是否套接字有错误发生 if(0 == ByresTransferred) { closesocket(PerHandleData->Socket); ::GlobalFree(PerHandleData); ::GlobalFree(PerIoData); continue; } //处理数据 cout<<PerIoData->DataBuf.buf << endl; Flags = 0; //清空,准备下个I/O数据 ZeroMemory(&(PerIoData->Overlapped),sizeof(OVERLAPPED)); PerIoData->DataBuf.len = 1024; PerIoData->DataBuf.buf = PerIoData->buffer; PerIoData->OperationType = 0; //read WSARecv(PerHandleData->Socket, &(PerIoData->DataBuf), //接受缓存区 1, &RecvBytes, //接受字节数 &Flags, &(PerIoData->Overlapped),//绑定重叠结构 NULL); } return 0 ;}