我现在的做法:
PerHandleKey = (LPPER_HANDLE_KEY) GlobalAlloc(GPTR, sizeof(PER_HANDLE_KEY));
PerHandleKey->sClient = PerIoData->sClient;
CreateIoCompletionPort((HANDLE)(PerHandleKey->sClient), dlg->CompletionPort, (DWORD) PerHandleKey,0);
WSASend(PerHandleKey->sClient, &(PerIoData->DataBuf), 1, &SendBytes, 0,&(PerIoData->Overlapped), NULL);  //简单回递信息,客户能收到
但是以后服务收到数据后再回递,客户就不能收到数据了,是不是哪儿的做法不正确哟?

解决方案 »

  1.   

    没什么必要构造PerHandleKey完成键,使用AcceptEx时,投递的结构应该包含一个套接字句柄,收到完成消息后:GetQueuedCompletionStatus...
    CreateIoCompletionPort((HANDLE)(PerIoData->sClient), dlg->CompletionPort, NULL,0);关联
    WSASend
    就可以了。
      

  2.   

    下次仍是再用WSASend()通过已与完成句柄关联的SOCKET 投递就可以了!