給你轉(zhuǎn)一篇文章吧

創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)景德鎮(zhèn),十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
定義心跳常量
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)定!
只講一個思路
設(shè)置一個時間間隔。
c發(fā)送。收到了嗎?等待。 時間自定
s接收。回復(fù)。收到了。
里邊涉及的東西比較多。還是加密的
發(fā)送收到了嗎?等待5秒再發(fā)送一次。接收到了嗎?。記錄是第二次發(fā)送。如果無返回。斷開。。
里邊要加入的東西比較多。靈活運用。。
這是基本的思路
你可以根據(jù)服務(wù)器收到的數(shù)據(jù)的長度來判斷,如果服務(wù)器收到的數(shù)據(jù)長度是0,那么意味著你的客戶端程序已經(jīng)斷開了連接。從TCP/IP協(xié)議棧的角度來說,就是客戶端程序關(guān)閉了自己寫的這一半連接,向服務(wù)器發(fā)出了一個FIN。這涉及到TCP的狀態(tài)遷移,關(guān)于這方面的知識,建議你看一下Richard Stevens先生的《TCP/IP 詳解》卷一和《Unix網(wǎng)絡(luò)編程》卷一,上面有詳細的解釋。
關(guān)于你的第二個問題,建議你仔細看一下自己的服務(wù)器程序代碼。服務(wù)器程序首先要建立一個監(jiān)聽socket,當有客戶端連接上來時,服務(wù)器會在一個新socket上接受客戶端連接。所以并不存在“亂”的問題。關(guān)于這個問題同樣推薦你看上面的兩本關(guān)于網(wǎng)絡(luò)編程的經(jīng)典著作。
網(wǎng)站名稱:vb.net心跳包怎么寫 易語言心跳包怎么寫
鏈接分享:http://chinadenli.net/article12/hhgsgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站收錄、網(wǎng)站排名、全網(wǎng)營銷推廣、網(wǎng)站制作、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)