拿了个别人的仅回显的IOCP代码稍加修改,增加了自己的应答部分编程仅用一个客户端测试,经常客户端异常断开(如调试程序一半就停)或开几个连接(另几个程序来连接服务端)的时候,IOCP服务端死掉,为何?而且还找不到原因,找不到出错的地方,错误随机出现,一旦出现用telnet等一切都连不上IOCP服务端了,错误都是10061 :由于目标机器积极拒绝,无法连接非常郁闷,请指教

解决方案 »

  1.   

    我认为你根本不了解人家代码的情况下,对别人的代码进行修改是很不明智的。先读代码和了解iocp的过程是比较重要的。其实也没啥,就那么两下子,找找资料一打。
      

  2.   

    你不贴代码谁知道问题出在哪儿你还可以重新去找一个IOCP的代码来看.如果你DOWN来的代码本身没有问题,再从"错误都是10061 :由于目标机器积极拒绝,无法连接"来看,估计是你开的端口在另一端被防火墙栏之类的栏住了,否则一般不会出现"积极拒绝"的
      

  3.   

    一个可能是服务器程序中有潜在BUG,例如指针错误,内存访问非法等
      

  4.   

    连接服务端口.
    不发数据,直接用阻塞recv,如果连接断开 就会有返回.这样你就可以立刻知道连接是否正常了.还有,发数据前要做判断连接是否正常.
      

  5.   

    1。把他的相关 API 吃透
    2。把他的程序结构吃透
    3。自己独立逐步搭建类似的程序
    4。你也学会了
      

  6.   

    少量测试问题不出现了,但是又来了新问题我用阻塞客户端向完成端口服务器(分开的2台机器)发大量线程连接进行测试DWORD g_dwNum=100个,1000个,10000个myTest1()
    {
         for (DWORD i=0;i < g_dwNum;i++)
         _beginthreadex(NULL , 0 , myThread , NULL , 0 , &uThreadID);
    }myTest2()
    {
         for (DWORD i=0;i < g_dwNum;i++)
             mySockFun();
    }myThread()
    {
       mySockFun();
    }mySockFun()
    {
      WSAStartup...
      connect...
      send...
      recv...
      closesocket...
      WSACleanup...
    }不论数量多少myTest2所有连接都成功
    但是myTest1不行,超过300个线程就有部分连接开始掉线,1000个的成功率80%,10000个的成功率55%
    掉线错误为:10061或10054根本达不到 完成端口号称的强大的性能,这是为何
      

  7.   

    to LZ:如果资源访问冲突,会出现这种问题。
    我以前也遇到过这样的情况。你再仔细
    看一下,是不是有些资源本应该加锁,
    而你没有加呢?
      

  8.   

    IOCP需要大量的积累,需要做大量的工作