青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

專職C++

不能停止的腳步

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用鏈接

留言簿(28)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jimaliu/archive/2009/11/30/4908658.aspx


用戶異常掉線檢測
                                 David.Zhu  2005/6/1
   目前主要有三種方法來實現用戶掉線檢測:SO_KEEPALIVE ,SIO_KEEPALIVE_VALS 和Heart-Beat線程。
下面我就上面的三種方法來做一下介紹。
(1)SO_KEEPALIVE 機制
        這是socket庫提供的功能,設置接口是setsockopt API:
   BOOL  bSet=TRUE;
   setsockopt(hSocket,SOL_SOCKET,SO_KEEPALIVE,(const char*)&bSet,sizeof(BOOL));

       根據MSDN的文檔,如果為socket設置了KEEPALIVE選項,TCP/IP棧在檢測到對方掉線后,
   任何在該socket上進行的調用(發送/接受調用)就會立刻返回,錯誤號是WSAENETRESET ;
   同時,此后的任何在該socket句柄的調用會立刻失敗,并返回WSAENOTCONN錯誤。

   該機制的缺點也很明顯:
         默認設置是空閑2小時才發送一個“保持存活探測分節”,不能保證實時檢測!
   當然也可以修改時間間隔參數,但是會影響到所有打開此選項的套接口!
         關聯了完成端口的socket可能會忽略掉該套接字選項。


(2)SIO_KEEPALIVE_VALS 機制
         這是從彭博兄那里學到一個機制拉,設置接口是WSAIoctl API:
     DWORD dwError = 0L ;
     tcp_keepalive sKA_Settings = {0}, sReturned = {0} ;
     sKA_Settings.onoff = 1 ;
     sKA_Settings.keepalivetime = 5500 ; // Keep Alive in 5.5 sec.
     sKA_Settings.keepaliveinterval = 3000 ; // Resend if No-Reply
     if (WSAIoctl(skNewConnection, SIO_KEEPALIVE_VALS, &sKA_Settings,
          sizeof(sKA_Settings), &sReturned, sizeof(sReturned), &dwBytes,
          NULL, NULL) != 0)
     {
           dwError = WSAGetLastError() ;
     }
     實現時需要添加tcp_keepalive and SIO_KEEPALIVE_VALS的定義文件MSTCPiP.h
     該選項不同于SO_KEEPALIVE 機制的就是它是針對單個連接的,對系統其他的套接
     口并不影響。
        針對完成端口的socket,設置了SIO_KEEPALIVE_VALS后,激活包由TCP STACK來負責。
     當網絡連接斷開后,TCP STACK并不主動告訴上層的應用程序,但是當下一次RECV或者SEND操作
     進行后,馬上就會返回錯誤告訴上層這個連接已經斷開了.如果檢測到斷開的時候,在這個連接
     上有正在PENDING的IO操作,則馬上會失敗返回.


     該機制的缺點:
             不通用啦。MS的API只能用于Windows拉。不過,呵呵用彭博兄的評論就是:
     優雅一些^_^.
   
(3)Heart-Beat線程
        沒說的。自己寫一個后臺線程,實現Heart-Beat包,客戶端受到該包后,立刻返回相應的反饋  包。

    該方法的好處是通用,但缺點就是會改變現有的通訊協議!

有開發網絡應用經歷的人都知道,網絡中的接收和發送數據都是使用WINDOWS中的SOCKET進行實現。但是如果此套接字已經斷開,那發送數據和接收數據的時候就一定會有問題。可是如何判斷這個套接字是否還可以使用呢?

  有人一定想到使用Send函數中的返回結果來進行判斷。如果返回的長度和自己發送出去的長度一致,那就說明這個套接字是可用的,否則此套接字一定出現了問題。但是我們并不是無時無刻的發送數據呀。如何解決呢?

  其實TCP中已經為我們實現了一個叫做心跳的機制。如果你設置了心跳,那TCP就會在一定的時間(比如你設置的是3秒鐘)內發送你設置的次數的心跳(比如說2次),并且此信息不會影響你自己定義的協議。

  在VC中實現心跳的例子很多,可是在DLEPHI中一直沒有相應的代碼。下面我是我使用DELPHI編寫的關于心跳的代碼(以IOCP為例),希望對大家有幫助。

定義心跳常量

const
  IOC_IN               =$80000000;
  IOC_VENDOR           =$18000000;
  IOC_out              =$40000000;
  SIO_KEEPALIVE_VALS   =IOC_IN or IOC_VENDOR or 4;

var

  inKeepAlive,OutKeepAlive:TTCP_KEEPALIVE;

實現代碼是在Acceptsc:= WSAAccept(Listensc, nil, nil, nil, 0);代碼的后面加入:

      opt:=1;
      if setsockopt(Acceptsc,SOL_SOCKET,SO_KEEPALIVE,@opt,sizeof(opt))=SOCKET_ERROR then
      begin
        closesocket(Acceptsc);
      end;
      inKeepAlive.onoff:=1;
      //設置3秒鐘時間間隔

  inKeepAlive.keepalivetime:=3000;

      //設置每3秒中發送1次的心跳
      inKeepAlive.keepaliveinterval:=1;
      insize:=sizeof(TTCP_KEEPALIVE);
      outsize:=sizeof(TTCP_KEEPALIVE);
      if WSAIoctl(Accept,SIO_KEEPALIVE_VALS,@inKeepAlive,insize,@outKeepAlive,outsize,@outByte,nil,nil)=SOCKET_ERROR then
      begin
        closesocket(Acceptsc);
      end;

如果加入以上的代碼以后,系統會每3秒中加入一次的心跳。并且如果客戶端斷線以后(網線斷),函數GetQueuedCompletionStatus會返回FALSE。

if (GetQueuedCompletionStatus(CompletionPort, BytesTransferred,DWORD(PerHandleData), POverlapped(PerIoData), INFINITE) = False) then
        begin
           //在這里處理客戶端斷線信息。

   continue;
        end;

以上就是我使用心跳的方法,此方法我已經在我的網絡游戲中使用。情況穩定!

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jimaliu/archive/2009/11/30/4908658.aspx

posted on 2010-11-25 17:09 冬瓜 閱讀(1192) 評論(0)  編輯 收藏 引用 所屬分類: 轉貼
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久青草大香线综合精品| 亚洲人成亚洲人成在线观看| 136国产福利精品导航网址应用| 欧美在线观看你懂的| 亚洲欧洲在线播放| 欧美了一区在线观看| 亚洲一区在线观看免费观看电影高清| 亚洲一区二区三区视频| 久久久久九九九九| 久久夜色精品| 亚洲一区二区三区中文字幕在线| 欧美三级黄美女| 亚洲午夜性刺激影院| 亚洲第一网站免费视频| 欧美精品日本| 亚洲香蕉成视频在线观看| 亚洲一区久久久| 国产欧美精品在线| 免费h精品视频在线播放| 久久精品电影| 亚洲国产精品欧美一二99| 亚洲激情视频| 国产精品国产三级国产普通话99| 欧美一级夜夜爽| 久久精品国产久精国产一老狼| 尤物yw午夜国产精品视频| 欧美jizzhd精品欧美巨大免费| 免费日韩一区二区| 欧美一区二区在线免费观看| 久久精品72免费观看| 99精品视频一区| 亚洲网站在线观看| 国产日韩欧美中文在线播放| 亚洲成色www久久网站| 欧美日韩国产成人| 久久青草福利网站| 欧美aa在线视频| 久久久久久久综合日本| 老司机成人在线视频| 一区二区高清视频| 老司机一区二区三区| 在线亚洲美日韩| 久久日韩精品| 亚洲午夜羞羞片| 欧美成年人视频网站| 亚洲小少妇裸体bbw| 欧美在线国产| 亚洲欧美日韩成人| 老牛影视一区二区三区| 午夜视黄欧洲亚洲| 欧美电影打屁股sp| 日韩视频免费在线| 国产美女精品| 夜夜精品视频一区二区| 亚洲国产精品久久久久婷婷884| 欧美α欧美αv大片| 欧美日韩一区二区在线| 欧美成人精品激情在线观看| 欧美午夜理伦三级在线观看| 亚洲国产精品第一区二区| 国产精品一区在线观看你懂的| 久久综合电影| 激情五月综合色婷婷一区二区| 亚洲精品久久久久| 99国产精品久久久久久久成人热| 午夜精品久久久久久久| 亚洲欧美中文在线视频| 欧美人与性动交cc0o| 久久在线视频| 伊人精品久久久久7777| 一区二区三区无毛| 久久婷婷久久| 久久精品观看| 国一区二区在线观看| 午夜亚洲性色视频| 久久成人羞羞网站| 国际精品欧美精品| 亚洲专区一区| 久久精品视频免费| 国产九九精品视频| 亚洲欧美国产精品桃花| 亚洲一区二区免费看| 欧美日韩精品一区二区三区| 亚洲高清资源| 亚洲国产视频一区| 欧美91大片| 日韩视频三区| 欧美一区二区三区四区在线观看| 欧美日韩亚洲一区二区三区| 亚洲一区二区三区色| 亚洲伊人第一页| 欧美伦理视频网站| 一区二区三区精品视频| 亚洲精品人人| 国产精品久久波多野结衣| 欧美国产日韩二区| 一本一本久久a久久精品综合麻豆| 欧美a级片网| 在线视频你懂得一区| 午夜一区不卡| 亚洲精品黄色| 欧美片在线播放| 欧美一区二区三区免费视| 久久夜色精品国产亚洲aⅴ| 亚洲乱码久久| 国产精品高清在线观看| 久久久999| 亚洲片在线观看| 午夜国产精品视频| 国产无一区二区| 麻豆av一区二区三区久久| 一本色道**综合亚洲精品蜜桃冫| 欧美亚洲视频| 国产午夜精品全部视频在线播放| 久久久av毛片精品| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲在线中文字幕| 国产曰批免费观看久久久| 另类激情亚洲| 亚洲国产天堂久久综合网| 欧美一级久久久久久久大片| 一区在线电影| 国产麻豆精品theporn| 久久综合九色综合久99| 亚洲欧美国内爽妇网| 欧美福利一区二区| 久久婷婷人人澡人人喊人人爽| 亚洲国产精品一区制服丝袜| 国产欧美日韩综合精品二区| 欧美成人69av| 久久夜色精品国产亚洲aⅴ| 中文精品视频| 99精品久久久| 欧美大片第1页| 麻豆乱码国产一区二区三区| 中文日韩在线| 在线亚洲免费| 亚洲精品国精品久久99热| 黄页网站一区| 国产女人aaa级久久久级| 国产精品久久精品日日| 欧美电影电视剧在线观看| 最近看过的日韩成人| 欧美成人激情视频免费观看| 亚洲宅男天堂在线观看无病毒| 亚洲视频在线观看| 亚洲激情图片小说视频| 亚洲韩日在线| 激情欧美一区二区| 悠悠资源网亚洲青| 狠狠色综合色综合网络| 精品动漫3d一区二区三区免费 | 99riav国产精品| 日韩视频免费观看| 亚洲国产日韩欧美在线图片| 欧美国产视频日韩| 蜜乳av另类精品一区二区| 欧美韩国日本一区| 免费一级欧美在线大片| 亚洲国产成人91精品| 免费在线日韩av| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久精品国产一区二区三| 久久香蕉国产线看观看av| 久久久久久久性| 欧美成人69av| 欧美黄色小视频| 一本久久精品一区二区| 99re国产精品| 欧美一区在线直播| 久久精品国产清自在天天线| 久久久免费精品| 毛片基地黄久久久久久天堂| 午夜精品在线观看| 免费h精品视频在线播放| 久久这里只有精品视频首页| 欧美日韩国产一级片| 欧美日韩国产综合一区二区| 久久久在线视频| 欧美高清在线视频观看不卡| 欧美激情五月| 国产精品久久波多野结衣| 国产亚洲永久域名| 在线成人欧美| 午夜欧美大尺度福利影院在线看| 欧美一区二区观看视频| 欧美国产先锋| 夜夜嗨av色一区二区不卡| 久久精品夜色噜噜亚洲aⅴ| 美女亚洲精品| 国产亚洲一区精品| 亚洲精品免费电影| 久久久久久久一区| 亚洲第一福利视频| 午夜性色一区二区三区免费视频 | 欧美jizz19性欧美| 国产精品99久久久久久久久久久久 | 一区精品久久| 在线视频日韩| 欧美一区二区大片|