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

專職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 冬瓜 閱讀(1191) 評論(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>
            欧美日韩免费观看一区=区三区| 开心色5月久久精品| 国产精品网站视频| 欧美午夜精品久久久| 欧美日本韩国| 国产精品久久999| 国产精品亚洲综合久久| 国模私拍视频一区| 最新国产拍偷乱拍精品| 一区二区三区精品在线 | 欧美69视频| 欧美成人午夜激情视频| 欧美久久久久久蜜桃| 国产精品扒开腿爽爽爽视频| 国产精品一区免费视频| 国语自产精品视频在线看一大j8| 亚洲国产专区| 亚洲一区二区三区三| 久久国产色av| 亚洲国产二区| 亚洲女人小视频在线观看| 欧美在线视频观看| 欧美欧美午夜aⅴ在线观看| 国产精品影音先锋| 亚洲精品免费在线播放| 久久国产综合精品| 亚洲精品一区在线观看| 欧美一区二区三区免费视| 欧美高清在线一区| 国产日韩精品电影| 在线亚洲高清视频| 欧美高清视频一区二区| 一区二区三区欧美在线| 久久综合久久88| 国产精品女主播在线观看 | 国产精品v日韩精品| 尤物九九久久国产精品的分类| 亚洲视频香蕉人妖| 欧美成人dvd在线视频| 亚洲午夜性刺激影院| 欧美国产第一页| 一区二区视频免费在线观看 | 欧美日韩免费一区二区三区视频| 国产亚洲欧美激情| 亚洲淫片在线视频| 亚洲欧洲日韩女同| 老司机精品视频网站| 国产色婷婷国产综合在线理论片a| 99视频精品| 亚洲韩国精品一区| 欧美风情在线| 亚洲精品综合精品自拍| 欧美黄色aaaa| 裸体素人女欧美日韩| 亚洲高清av| 欧美国产日韩一区二区| 久久中文精品| 亚洲国产日韩欧美综合久久| 久久久久久久性| 久久精品亚洲一区| 永久91嫩草亚洲精品人人| 久久久久久一区二区三区| 亚洲国产综合在线| 在线播放国产一区中文字幕剧情欧美 | 国产主播一区| 久久久久网站| 久久精品国产亚洲a| 黑丝一区二区| 毛片精品免费在线观看| 久久久亚洲午夜电影| 极品少妇一区二区三区| 久久综合成人精品亚洲另类欧美| 欧美在线观看你懂的| 激情文学综合丁香| 欧美国内亚洲| 欧美乱人伦中文字幕在线| 一本色道久久综合亚洲精品婷婷 | 国产午夜精品一区二区三区视频| 久久不射网站| 久久久久五月天| 亚洲免费电影在线| 一区二区欧美日韩| 国产一区视频在线看| 欧美成人蜜桃| 国产精品成av人在线视午夜片| 午夜久久tv| 久久久噜噜噜久久狠狠50岁| 亚洲精品一区二区三区av| 一区二区三区欧美亚洲| 狠狠综合久久av一区二区老牛| 欧美国产精品劲爆| 国产精品二区在线观看| 另类人畜视频在线| 国产精品99一区二区| 久久尤物视频| 国产精品二区二区三区| 久久综合中文| 欧美丝袜一区二区| 免费不卡在线视频| 国产精品色婷婷| 亚洲国产cao| 国产亚洲欧美一区二区| 亚洲激情另类| 伊人久久大香线蕉综合热线 | 蜜臀a∨国产成人精品| 欧美三级资源在线| 欧美jizz19hd性欧美| 国产精品九九| 亚洲激情影院| 狠狠入ady亚洲精品| 野花国产精品入口| 亚洲国产精品va在看黑人| 亚洲欧美国产精品专区久久| 亚洲伦理精品| 久久久久久久久蜜桃| 亚洲一区bb| 欧美激情性爽国产精品17p| 久久网站免费| 欧美日韩在线综合| 欧美日韩福利在线观看| 欧美91大片| 极品少妇一区二区三区精品视频| 夜夜夜精品看看| 一区二区日韩| 欧美精品激情| 91久久久亚洲精品| 亚洲大胆av| 久久综合给合| 巨乳诱惑日韩免费av| 国产一本一道久久香蕉| 午夜精品在线看| 久久爱www久久做| 国产日产欧产精品推荐色 | 国产精品专区一| 中文在线资源观看视频网站免费不卡| 亚洲三级视频| 欧美巨乳在线| 亚洲精品五月天| 亚洲视屏在线播放| 国产精品啊v在线| 亚洲私人影吧| 久久久久国色av免费观看性色| 国产女人18毛片水18精品| 亚洲欧美日本精品| 久久免费少妇高潮久久精品99| 国产真实乱子伦精品视频| 久久av一区二区三区漫画| 久久久蜜桃一区二区人| 伊人婷婷久久| 欧美成年人网| 99成人免费视频| 欧美亚洲午夜视频在线观看| 国产日韩视频一区二区三区| 欧美在线一区二区| 欧美福利在线| 宅男66日本亚洲欧美视频| 国产精品看片资源| 久久精品亚洲一区二区| 欧美国产一区二区在线观看| 亚洲精品一区二区在线| 国产精品护士白丝一区av| 午夜一区二区三视频在线观看| 久久免费精品视频| 艳妇臀荡乳欲伦亚洲一区| 国产精品地址| 久久一区二区三区四区| 日韩午夜在线| 久久人体大胆视频| 亚洲伦理在线观看| 国产精品一区久久久| 久久综合久色欧美综合狠狠| 亚洲美女视频在线观看| 久久精品国产99| 99re6这里只有精品视频在线观看| 国产精品视频精品| 欧美高清在线播放| 久久国产免费看| 亚洲精品网站在线播放gif| 久久精品国产精品亚洲综合| 亚洲精品护士| 伊人成人开心激情综合网| 国产精品av一区二区| 久久综合国产精品| 亚洲欧美在线磁力| 国产伦理精品不卡| 欧美激情1区2区3区| 亚洲欧美激情四射在线日 | 亚洲综合日韩中文字幕v在线| 蜜臀久久99精品久久久画质超高清| 99国产精品国产精品久久| 国产一区二区| 国产精品久久久久久久久久尿 | 欧美高清视频www夜色资源网| 销魂美女一区二区三区视频在线| 亚洲精品视频免费在线观看| 老司机一区二区| 久久精品国产亚洲aⅴ| 午夜激情一区| 亚洲欧美日韩一区在线| 在线亚洲一区观看|