當前位置:遊戲中心平台 - 遊戲盒子 - delphi 接收心跳包怎麽寫

delphi 接收心跳包怎麽寫

給妳轉壹篇文章吧

定義心跳常量

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;

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

  • 上一篇:孤膽英雄1的遊戲介紹
  • 下一篇:《權力的遊戲第六季》雪諾終於復活?
  • copyright 2024遊戲中心平台