代码如下
int main(int argc, char* argv[])
{
DWORD EventTotal = 0;
WSAOVERLAPPED          OverlappedArray[5];
WSAEVENT          EventArray[5];
WSABUF buff[5];
WSADATA wsaData;
SOCKET ListeningSocket,ConnSocketArray[5];;
SOCKADDR_IN ServerAddr;
char cbuff[5][5];

::WSAStartup(MAKEWORD(2,2) ,&wsaData );

ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(8000);
ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");         ListeningSocket = ::socket(AF_INET ,SOCK_STREAM ,IPPROTO_TCP );//<<windows网络编程>>上说socket函数默认支持重叠io的,是这样的吗? ::bind(ListeningSocket ,(LPSOCKADDR)&ServerAddr ,sizeof(ServerAddr)); ::listen(ListeningSocket ,5); bool ThreadStart = true; DWORD Flags ,threadId ,RecvBytes; while(EventTotal < 5)
{
ConnSocketArray[EventTotal] = ::accept(ListeningSocket ,NULL ,NULL);

EventArray[EventTotal] = ::WSACreateEvent();
ZeroMemory(&OverlappedArray[EventTotal],sizeof(WSAOVERLAPPED));
OverlappedArray[EventTotal].hEvent = EventArray[EventTotal]; buff[EventTotal].len = 5;
buff[EventTotal].buf = cbuff[EventTotal]; ::WSARecv(ConnSocketArray[EventTotal] ,&buff[EventTotal] ,1 ,&RecvBytes
,&Flags ,&OverlappedArray[EventTotal] ,NULL);
//进行到这步就出现10045错误,说是参考的对象种类不支持尝试的操作,why?
if( ::WSAGetLastError() != WSA_IO_PENDING )
{
cout<<::WSAGetLastError()<<endl;
::closesocket(ConnSocketArray[EventTotal]);
} EventTotal++;
...
...
以下代码略郁闷啊,都想了半天了,还是找不出原因,高手指教,分不够可加.

解决方案 »

  1.   

    你使用的socket套接字可能是处于监听状态的,使用需要WSAWaitForMultipleEvents和WSAEnumNetworkEvents来等待事件参考:
    http://dev.csdn.net/develop/article/39/39122.shtm
    http://dev.csdn.net/develop/article/39/39128.shtm
      

  2.   

    ListeningSocket = ::socket(AF_INET ,SOCK_STREAM ,IPPROTO_TCP );//<<windows网络编程>>上说socket函数默认支持重叠io的,是这样的吗?
    ///////////////////////////////////是的
    此处
    buff[EventTotal].buf = cbuff[EventTotal];有误
    你的
    buff[EventTotal].len = 5;而你的cbuff[EventTotal]的长度为1
    所以你应该定义char ch[5];buff[EventTotal].buf = ch;不能认为二维数据的cbuff[EventTotal]的长度为5
      

  3.   

    OverlappedArray[EventTotal].hEvent = EventArray[EventTotal];
    在这里你没有指定相应的消息机制。所以会出现问题
      

  4.   

    对,重叠io也要有相应的消息,只不过这个消息是在重叠结构中触发的,其实她的数组是和你的相应的socket对应的