摘錄 網路通訊中的心跳機制的實現

2021-05-23 15:35:25 字數 1176 閱讀 7157

tcp中已經實現了心跳的機制, 如果設定了心跳,那tcp就會在一定的時間(比如設定的是3秒鐘)內傳送設定的次數的心跳(比如說2次),並且此資訊不會影響自定義的協議。

定義心跳常量

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。

begin

//在這裡處理客戶端斷線資訊。

continue;

end;

以上就是使用心跳的方法.

了解網路通訊中的埠

熟悉tcp udp協議的同學可能都知道埠這一詞,無論是tcp還是udp報文都有源埠和目的埠字段,為什麼會需要這些欄位呢?這是因為,對於網路之間的通訊,本質而言就是應用程序之間的通訊,而ip協議只提供主機與主機之間的通訊,可是乙個主機有那麼多程序,如何區別是哪個程序通訊呢?埠就起著標識的作用。通過ip...

網路通訊中的加密和解密

內容明確 1.加密 包含秘鑰和加密演算法 2.解密 包含秘鑰和解密演算法 3.公鑰 公開的秘鑰 4.私鑰 私有的秘鑰 正文 對稱加密 通訊雙方使用同一秘鑰 私鑰 對資料加密 解密。可能產生的問題 雙方對於私鑰的獲取問題。非對稱加密 以典型的rsa舉例 通訊雙方各自有一對公鑰和私鑰 公鑰加密,只有對應...

網路通訊中埠的分類及作用

熟悉並了解tcp和udp協議的報文段格式的同學,對於埠這個詞一定不陌生。在這些報文段格式中我們總能看到源埠和目的埠這些字段,那關於埠今天這篇文章我們便來了解一下。我們知道兩個程序要想在計算機內部盡享通訊,可以有管道 共享記憶體 訊號量 訊息佇列等方法。兩個程序如果需要進行通訊最基本的前提是能夠唯一的...