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

專職C++

不能停止的腳步

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

常用鏈接

留言簿(28)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/jimaliu/archive/2009/11/30/4908658.aspx


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

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

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


(2)SIO_KEEPALIVE_VALS 機制
         這是從彭博兄那里學(xué)到一個機制拉,設(shè)置接口是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() ;
     }
     實現(xiàn)時需要添加tcp_keepalive and SIO_KEEPALIVE_VALS的定義文件MSTCPiP.h
     該選項不同于SO_KEEPALIVE 機制的就是它是針對單個連接的,對系統(tǒng)其他的套接
     口并不影響。
        針對完成端口的socket,設(shè)置了SIO_KEEPALIVE_VALS后,激活包由TCP STACK來負(fù)責(zé)。
     當(dāng)網(wǎng)絡(luò)連接斷開后,TCP STACK并不主動告訴上層的應(yīng)用程序,但是當(dāng)下一次RECV或者SEND操作
     進行后,馬上就會返回錯誤告訴上層這個連接已經(jīng)斷開了.如果檢測到斷開的時候,在這個連接
     上有正在PENDING的IO操作,則馬上會失敗返回.


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

    該方法的好處是通用,但缺點就是會改變現(xiàn)有的通訊協(xié)議!

有開發(fā)網(wǎng)絡(luò)應(yīng)用經(jīng)歷的人都知道,網(wǎng)絡(luò)中的接收和發(fā)送數(shù)據(jù)都是使用WINDOWS中的SOCKET進行實現(xiàn)。但是如果此套接字已經(jīng)斷開,那發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的時候就一定會有問題。可是如何判斷這個套接字是否還可以使用呢?

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

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

  在VC中實現(xiàn)心跳的例子很多,可是在DLEPHI中一直沒有相應(yīng)的代碼。下面我是我使用DELPHI編寫的關(guān)于心跳的代碼(以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;

實現(xiàn)代碼是在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;
      //設(shè)置3秒鐘時間間隔

  inKeepAlive.keepalivetime:=3000;

      //設(shè)置每3秒中發(fā)送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;

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

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

   continue;
        end;

以上就是我使用心跳的方法,此方法我已經(jīng)在我的網(wǎng)絡(luò)游戲中使用。情況穩(wěn)定!

 

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/jimaliu/archive/2009/11/30/4908658.aspx

posted on 2010-11-25 17:09 冬瓜 閱讀(1192) 評論(0)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)貼
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线观看欧美亚洲| 午夜精品福利在线| 亚洲综合精品自拍| 91久久在线| 久久久久久久欧美精品| 亚洲一区二区精品| 欧美极品aⅴ影院| 久久久噜噜噜久久| 欧美系列精品| 日韩一区二区久久| 亚洲毛片一区二区| 欧美成人视屏| 欧美 日韩 国产在线| 国产午夜精品全部视频在线播放 | 夜夜夜精品看看| 亚洲激情在线激情| 久久久人成影片一区二区三区| 性色一区二区| 国产精品二区在线| 99在线视频精品| 亚洲小视频在线观看| 欧美精品在线免费| 亚洲日本成人| 激情综合电影网| 欧美在线视频一区二区| 久久久久久精| 国内精品视频在线观看| 性欧美长视频| 久久综合成人精品亚洲另类欧美| 国产精品入口夜色视频大尺度| 日韩视频久久| 亚洲自拍三区| 国产情侣久久| 久久久夜色精品亚洲| 欧美成人高清视频| 日韩视频一区二区在线观看 | 欧美日韩国语| 日韩视频―中文字幕| 亚洲午夜高清视频| 国产精品视频久久一区| 性欧美精品高清| 欧美a级片网站| 亚洲毛片在线免费观看| 欧美三区美女| 性高湖久久久久久久久| 久久久亚洲午夜电影| 亚洲国产乱码最新视频| 欧美日本簧片| 亚洲欧美日韩成人| 欧美不卡视频| 亚洲免费网站| 国产日韩欧美麻豆| 欧美成人a∨高清免费观看| 亚洲精品中文字幕有码专区| 亚洲一区国产视频| 国内精品久久久| 欧美精选一区| 亚洲一二三区精品| 蜜桃久久精品乱码一区二区| 亚洲精品一级| 国产欧美一区二区精品仙草咪| 亚洲欧美在线磁力| 亚洲二区在线视频| 欧美中文字幕久久| 亚洲精选视频在线| 国产欧美三级| 欧美人体xx| 久久精品国亚洲| 日韩一级黄色大片| 久久久久久夜精品精品免费| 亚洲毛片一区二区| 国产亚洲激情| 欧美日韩精品系列| 久久久久网址| 亚洲男同1069视频| 最新亚洲一区| 久久在线免费视频| 午夜在线精品偷拍| 亚洲精品久久久久| 国产精品亚洲人在线观看| 欧美电影打屁股sp| 久久精品女人的天堂av| 亚洲午夜羞羞片| 最新日韩在线| 欧美成人一区在线| 久久精品123| 午夜亚洲视频| 亚洲在线播放| 一本色道久久88亚洲综合88| 亚洲第一中文字幕| 精品成人久久| 国产一区二区三区丝袜| 欧美调教vk| 欧美精品一区二区在线观看| 久久综合999| 久久精品成人欧美大片古装| 亚洲五月六月| 在线亚洲欧美视频| 日韩一级黄色片| 亚洲麻豆视频| 亚洲第一精品夜夜躁人人爽| 免费成人在线视频网站| 欧美一二区视频| 亚洲视频在线观看免费| 亚洲精品乱码久久久久久蜜桃91 | 亚洲欧美日韩在线| 亚洲无线视频| 亚洲综合激情| 午夜亚洲福利| 亚洲欧美日韩中文在线制服| 亚洲一级在线观看| 午夜国产不卡在线观看视频| 亚洲欧美一区二区在线观看| 亚洲中字在线| 亚洲欧美在线一区二区| 亚洲欧洲av一区二区| 欧美一区二区三区四区在线观看 | 国产字幕视频一区二区| 国产亚洲精品久久久久婷婷瑜伽| 国产嫩草一区二区三区在线观看| 国产精品美女久久久久av超清| 国产精品久久久91| 国产欧美精品一区| 一区在线电影| 日韩视频―中文字幕| 一区二区三区国产在线| 亚洲一区二区欧美日韩| 欧美一区二区啪啪| 久久伊人精品天天| 亚洲国产另类精品专区| 99精品欧美| 欧美一区二区免费观在线| 久久国产精品高清| 欧美高清影院| 国产精品嫩草久久久久| 韩国成人精品a∨在线观看| 亚洲黄色成人网| 亚洲一区在线观看视频| 久久精品久久综合| 亚洲第一精品电影| 亚洲视频在线一区| 久久青草久久| 国产精品www| 在线成人激情| 9l视频自拍蝌蚪9l视频成人| 欧美一区二区黄色| 亚洲第一页在线| 中文在线不卡视频| 美国成人毛片| 国产精品视频yy9299一区| 尤物精品在线| 亚洲免费一区二区| 女女同性精品视频| 一区二区三区日韩欧美| 香蕉免费一区二区三区在线观看 | 日韩午夜在线播放| 久久精品视频在线观看| 亚洲精品在线观| 久久se精品一区精品二区| 欧美黄色网络| 黄色精品一二区| 亚洲小说欧美另类社区| 欧美激情国产高清| 午夜激情综合网| 欧美日韩激情小视频| 亚洲高清不卡在线| 久久精品国产999大香线蕉| 亚洲毛片在线免费观看| 久久婷婷国产麻豆91天堂| 国产精品乱码一区二三区小蝌蚪| 亚洲精品久久嫩草网站秘色 | 蜜月aⅴ免费一区二区三区| 国产欧美日韩一区二区三区在线| 亚洲肉体裸体xxxx137| 久久亚洲精选| 香蕉免费一区二区三区在线观看| 欧美日韩午夜在线视频| 在线欧美亚洲| 久久人体大胆视频| 香港久久久电影| 国产女主播视频一区二区| 亚洲自拍三区| 一区二区三区日韩欧美精品| 欧美国产视频在线| 亚洲成色999久久网站| 久久九九久精品国产免费直播 | 亚洲欧美视频一区| 国产精品久久久久久久app| 99re6热只有精品免费观看 | 久久一区国产| 欧美一区二区三区精品| 国产日韩欧美在线视频观看| 亚洲一区二区三区成人在线视频精品| 91久久线看在观草草青青| 欧美99在线视频观看| 136国产福利精品导航网址| 麻豆精品精华液| 蜜桃av噜噜一区二区三区| 在线观看欧美日韩国产| 欧美 日韩 国产 一区|