求SOCKET重叠模型结构定义示例代码.该怎么解决

求SOCKET重叠模型结构定义示例代码.............
小猪的手把手教你玩转SOCKET模型之重叠文章看了,程序也下了感觉真的很不错,
但是猪哥的WSASEND部分没有示例,我调起来很困难,各位帮帮忙,最好有完整的示例代码,
谢过!

------解决方案--------------------
WSASend和WSARecv的用法没有太大差别,你可以参考他的WSARecv代码
------解决方案--------------------
C/C++ code
#include "stdafx.h"
WSAOVERLAPPED    AcceptOverlapped[10];
SOCKET    s,c;
int i;
WSAEVENT EventArray[WSA_MAXIMUM_WAIT_EVENTS];
WSABUF     DataBuf;      
DWORD     dwEventTotal,        // 程序中事件的总数
          dwRecvBytes,         // 接收到的字符长度
          Flags;               // WSARecv的参数 
void CALLBACK WorkRoutine(DWORD error,DWORD BytesTransferred,LPWSAOVERLAPPED Overlapped,
                          DWORD InFlags){
    DWORD    SendBytes;
    DWORD    RecvBytes;
    DWORD    Flags;
    if(error != 0 || BytesTransferred == 0){
    cout<<error<<endl;
    closesocket(c);
    return;
    }
    cout<<DataBuf.buf<<endl;
    return ;
}
DWORD WINAPI _AcceptProc(LPVOID lpParameter){
    // c = WSASocket(AF_INET,SOCK_STREAM,0,NULL,NULL,WSA_FLAG_OVERLAPPED);
    SOCKET    *s = (SOCKET*)lpParameter;
    char    buffer[1024];
    if(i == 10 ){
        cout<<"客户连接已满"<<endl;
        shutdown(c,2);
        closesocket(c);
        i--;
        if(i == 0){
            cout<<"以清空"<<endl;
            return 0;
        }
        return 0;
    }
    ZeroMemory(&buffer,sizeof(buffer));
    DataBuf.buf = buffer;
    DataBuf.len = sizeof(buffer);
    while(1){
    
    c = accept(*s,NULL,NULL);
    if(c == INVALID_SOCKET){
        cout<<"Accept错误"<<endl;
        cout<<WSAGetLastError()<<endl;
        return 0;
    }
    ZeroMemory(&AcceptOverlapped[i],sizeof(AcceptOverlapped));
    if(i == 0){
    
    if( WSARecv(c,&DataBuf,1,&dwRecvBytes,&Flags,&AcceptOverlapped[i],WorkRoutine) == SOCKET_ERROR){
        if(WSAGetLastError() != WSA_IO_PENDING){
            cout<<"WSARecv failed with error"<<WSAGetLastError()<<endl;
            closesocket(c);
            WSACloseEvent(EventArray[dwEventTotal]);
            return 0;
        }
        }
    }
    i++;
    Sleep(500);
    }
    // CreateThread(NULL,0,_AcceptProc,s,0,NULL);
    return 0;
}

DWORD WINAPI _InterestEventProc(LPVOID lpParameter){

    return 0;
}
int main(int argc, char* argv[])
{
    WSADATA    wsaData;
    SOCKET    s;    
    sockaddr_in     service,client;
    WORD    Version = MAKEWORD(2,2);
    DWORD    ThreadID;

    EventArray[dwEventTotal] = WSACreateEvent();
    
    
    //lAcceptOverlapped.hEvent = EventArray[dwEventTotal];
    dwEventTotal ++;
    
    WSAStartup(Version,&wsaData);
    s = WSASocket(AF_INET,SOCK_STREAM,0,NULL,NULL,WSA_FLAG_OVERLAPPED);
    if(s == INVALID_SOCKET){
        cout<<"WSASocket错误"<<endl;
        cout<<WSAGetLastError()<<endl;
        getch();
        WSACleanup();
        return 0;
    }
    service.sin_addr.S_un.S_addr   = INADDR_ANY;
    service.sin_family = AF_INET;
    service.sin_port   = htons(5150);
    
    if( bind(s,(sockaddr*)&service,sizeof(sockaddr_in)) == SOCKET_ERROR){
        cout<<"bind 错误"<<endl;
        cout<<WSAGetLastError()<<endl;
        getch();
        WSACleanup();
        return 0;
    }
    listen(s,10);
    CreateThread(NULL,0,_AcceptProc,&s,0,NULL);
    
    DWORD    dwIndex = 0, dwBytesTransferred;
    
    while(1){
    dwIndex = WSAWaitForMultipleEvents(dwEventTotal,EventArray,false,2000,true);
    if(dwIndex == WSA_WAIT_TIMEOUT){
        cout<<"超时"<<endl;
        continue;
    }
    if(dwIndex == WAIT_IO_COMPLETION){
        cout<<"IO完成"<<endl;
        break;
    }
    dwIndex = dwIndex - WSA_WAIT_EVENT_0;
    
    if(dwIndex == 0){
        cout<<"连入一个用户"<<endl;
        continue;
    }
    WSAResetEvent(EventArray[dwIndex]);
    WSAGetOverlappedResult(s,&AcceptOverlapped[i],& dwBytesTransferred,false,&Flags);
    
    if(dwBytesTransferred == 0){
        cout<<"数据流量0关闭";
      closesocket(s);
    WSACloseEvent(EventArray[dwIndex]);    // 关闭事件
      return 0;
    }    
    Sleep(500);
    }    
    getch();
    WSACloseEvent(EventArray[dwEventTotal]);
    closesocket(s);
    WSACleanup();
    return 0;
}