刚开始学完成端口 作了简单的程序尝试了下 直接运行完成端口不能得到数据 但是我在设置了1个断点后居然就正常了 断点取消后又不行了 不知道哪里写错了 谁能帮帮小弟 谢谢!
我把断点就设置在打星号那个位置后面一行 就是
::WSARecv(pPerhandle->s,&buf,1,&rev,&flags,&pPerio->overlapped,NULL);后面 另外有个程序直接连接它 然后send几个字符过来 直接运行就是收不到啊~~~~郁闷:(
// Server.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib,"WS2_32")
#define BUFF_SIZE 1024class InitWinsock{
public:
InitWinsock();
~InitWinsock();
};inline InitWinsock::InitWinsock(){
    WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if(::WSAStartup(sockVersion,&wsaData)!=0){
//exit(0);
}
}
inline InitWinsock::~InitWinsock(){
::WSACleanup();
}
InitWinsock initWinsock;
char* Buffer;
typedef struct PER_HANDLE{
    SOCKET s;
sockaddr_in addr;
}PER_HANDLE,*PPER_HANDLE;typedef struct PER_IO{
    OVERLAPPED overlapped;
char buff[BUFF_SIZE];
int oppType;
#define OP_READ   1
#define OP_WRITE  2
#define OP_ACCEPT 3
}PER_IO,*PPER_IO;
DWORD WINAPI ServerThread(LPVOID lpParam){
HANDLE completionPort=(HANDLE)lpParam;
DWORD bytesNumber;
PPER_HANDLE pPerhandle;
PPER_IO pPerio;

while(true){
//printf("aa \n");
BOOL bOK=::GetQueuedCompletionStatus(completionPort,&bytesNumber,(LPDWORD)&pPerhandle,(LPOVERLAPPED*)&pPerio,WSA_INFINITE);////////////

switch(pPerio->oppType){
case OP_READ:
{
pPerio->buff[bytesNumber]='\0';
printf("rev %s\n",pPerio->buff);
    break;
}
case OP_WRITE:
{
    break;
}
}
}
    return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE completionPort=::CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,0);
::CreateThread(NULL,0,ServerThread,(LPVOID)completionPort,0,0);
SOCKET sListen=::socket(AF_INET,SOCK_STREAM,0);
sockaddr_in servAddr;
servAddr.sin_port=htons(4567);
servAddr.sin_family=AF_INET;
servAddr.sin_addr.S_un.S_addr=INADDR_ANY;
bind(sListen,(sockaddr*)&servAddr,sizeof(servAddr));
listen(sListen,5); while(true){

    SOCKADDR_IN clientRemote;
int len=sizeof(clientRemote);
SOCKET newConnection=accept(sListen,(sockaddr*)&clientRemote,&len);
PPER_HANDLE pPerhandle=(PPER_HANDLE)::GlobalAlloc(GPTR,sizeof(PER_HANDLE));
pPerhandle->s=newConnection;

memcpy(&pPerhandle->addr,&clientRemote,len);
::CreateIoCompletionPort((HANDLE)pPerhandle->s,completionPort,(DWORD)pPerhandle,0);
  PPER_IO pPerio=(PPER_IO)::GlobalAlloc(GPTR,sizeof(PPER_IO));
pPerio->oppType=OP_READ;
WSABUF buf;
buf.buf=pPerio->buff;
buf.len=BUFF_SIZE;
DWORD rev=-1;
DWORD flags=0;
for(int i=0;i<1024;i++)
buf.buf[i]='0';
::WSARecv(pPerhandle->s,&buf,1,&rev,&flags,&pPerio->overlapped,NULL);//////***********************

}
return 0;
}