1. 程式人生 > >UDP打洞和心跳包設計

UDP打洞和心跳包設計

一、裝置終端
class DeviceClient {
int deviceID;
int IP;
int port;
char connectID[16];
time_t lastTime;
struct event timeoutEv;//超時器
};
typedef list<DeviceClient *> deviceList;

二、移動控制終端
class UserClient {
int userID;
int IP;
int port;
char connectID[16];
time_t lastTime;//接收的時候更新,並開啟超時器
struct event timeoutEv;//超時器:如果超時,認為客戶端掉線
};

typedef list<UserClient *>userList;

三、UDP心跳包設計(服務端)
http://blog.csdn.net/liuguanghui1988/article/details/7090531
3.1 UDP包接收執行緒
1)recvfrom
2)find connectID 並看看是否是心跳包
3)如果是心跳包,查詢connectID對應的客戶端,如果客戶端存在,則更新lastTime,如果客戶端不存在,則新建客戶端並更新lastTime;

3.2 UDP包超時器
1)時間的定義(連續三次收不到心跳包,即超時時間為客戶端心跳包時間的3倍)
2)超時事件到達,則認為客戶端掉線,刪除DeviceClient或UserClient

四、UDP心跳包設計(客戶端)
每隔30秒傳送一次心跳包


五、打洞設計
http://www.cppblog.com/Lee7/archive/2008/01/25/41850.html
打洞由移動控制終端或者裝置終端發起。下面以移動控制終端發起為例,詳細說明一下打洞的流程
為了方便描述,定義移動控制終端為UserClient,裝置終端為DeviceClient,服務端為Server
流程如下:
1)UserClient Login
2)DeviceClient Login
3)UserClient send "P2P_Punch deviceID" Message to Server
4)Server send "P2P_WantYou userID" Message to DeviceClient
5)UserClient send "P2P_Message msg" Message to DeviceClient
6)DeviceClient send "P2P_Message msg" Message to UserClient

相關推薦

UDP心跳設計

一、裝置終端class DeviceClient { int deviceID; int IP; int port; char connectID[16]; time_t lastTime; struct event timeoutEv;//超時器};typedef list<DeviceClient

TCPUDP的區別

為什麼網上講到的P2P打洞基本上都是基於UDP協議的打洞?難道TCP不可能打洞?還是TCP打洞難於實現?      假設現在有內網客戶端A和內網客戶端B,有公網服務端S。      如果A和B想要進行UDP通訊,則必須穿透雙方的NAT路由。假設為NAT-A和NAT-B。           A傳送資料包到公

NAT穿透(UDP

會有 work true icmp sea 類型判斷 無法 部分 什麽 1、NAT(Network Address Translator)介紹 NAT有兩大類,基本NAT和NAPT。 1.1、基本NAT 靜態NAT:一個公網IP對應一個內部IP,一對一轉換 動態NAT:N

TCP連接探測中的Keepalive心跳

代碼結構 article 自帶 斷開 結構 連接 防火墻 不用 內部 轉載:http://blog.csdn.net/aa2650/article/details/17027845 1. TCP保活的必要性 1) 很多防火墻等對於空閑socket自動關閉 2) 對於非正常斷

Darwin Streaming Server 支援UDP

RTSP客戶端點播Darwin 視訊時,SDP協商後的客戶端埠可能是在NAT後面,所以需要Darwin支援NAT打洞的功能,從Darwin的原始碼看,官方的原始碼是不支援這個能力的。 通過抓取VLC客戶端的包發現,VLC在播放RTSP流時,兩次SETUP(音訊流和視訊分別協商埠)之後,

C#與python UDP通訊

本標題的應用場景是C#系統服務端和基於linux的python裝置在不同的區域網下通訊,通常C#系統端在辦公室內部wifi下,裝置在室外利用4G上網。 打洞原理網上蠻多的,隨便一搜就是好多,實際將如何打洞的確很少。這裡需要理論的推薦一篇部落格,個人覺得寫的很好。 https://blog.csd

心跳設計

伺服器端: 定期給所有的客戶端發包,開啟一個計時器,這個包發了,客戶端會回一個的,等待計時結束,看哪些客戶端沒有返回包,說明有可能掉線了。 如果條件鬆一點話,在x次檢測中,某個客戶端都沒有返回則判定掉線(計時建議都寫在update裡面,用開關控制判定)   客戶端: update裡面寫倒計

【原創】IP攝像頭技術縱覽(七)---P2P技術—UDP實現內網NAT穿透

【原創】IP攝像頭技術縱覽(七)—P2P技術—UDP打洞實現內網NAT穿透 本文屬於《IP攝像頭技術縱覽》系列文章之一: Author: chad Mail: [email protected] 本文可以自由轉載,但轉載請務必註明

試驗UDP穿透NAT

目標 路由穿透,實現廣域網P2P通訊。 4種典型NAT型別 按照NAT裝置在進行地址對映時行為的不同,NAT可以分為以下四種:  Full Cone  Restricted Cone  Port Restricted Con

UDPNAT大致分為下面四類 P2P

NAT大致分為下面四類 1) Full Cone 這種NAT內部的機器A連線過外網機器C後,NAT會開啟一個埠.然後外網的任何發到這個開啟的埠的UDP資料報都可以到達A.不管是不是C發過來的. 例如 A:192.168.8.100 NAT:202.100.100.100

內網穿透&UDP

文章轉載自:http://www.cnblogs.com/cinlap/articles/2684330.html 這兩天找度度重新回憶了一下關於內網穿透的事情,在百度文庫上找到了兩三篇寫的比較通俗易懂的文章,把內網穿透做個簡單總結。 首先文章建議 Cone NA

NAT穿透技術詳解(udp精髓附程式碼)

以前自己寫的程式碼都只是在本地進行c/s通訊,今天想寫一個可以跨越外網的c/s通訊,這裡我就用udp實現一個點對點的不同外網的通訊。用到的技術就是nat穿透技術,這裡最直接使用的就是udp打洞技術。文中如有表述不清楚,歡迎提問。如果你需要nat穿透技術的詳解點這裡:nat穿透

Maven為web專案同時jarwar,deploy時只上傳jar的配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://

C#高效能大容量SOCKET併發(六):超時Socket斷開(守護執行緒)心跳

守護執行緒 在服務端版Socket程式設計需要處理長時間沒有傳送資料的Socket,需要在超時多長時間後斷開連線,我們需要獨立一個執行緒(DaemonThread)來輪詢,在執行斷開時,需要把Socket物件鎖定,並呼叫CloseClientSocket來斷開連線,具體

golang實現p2p之UDP

當今網際網路到處存在著一些中介軟體(MIddleBoxes),如NAT和防火牆,導致兩個(不在同一內網)中的客戶端無法直接通訊。 這些問題即便是到了IPV6時代也會存在,因為即使不需要NAT,但還有其他中介軟體如防火牆阻擋了連結的建立。 目前部署的中介軟體多都是在C/

NAT穿透,UDP程式

在看NAT穿透和UDP打洞原理,網上都是講原理,沒有程式,我把程式寫出來。 server.py,輔助打洞的伺服器。 peer.server.py,被打洞的節點。 peer.client.py,主動打洞的節點。 基本原理是: 1. peer.client向peer.serve

Python實現簡單的udp(P2P)

UDP穿越NAT的具體設計    首先,Client A登入伺服器,NAT 1為這次的Session分配了一個埠60000,那麼Server S收到的Client A的地址是200.0.0.132:60000,這就是ClientA的外網地址了。同樣,Client

簡單的p2p-demo,udp

什麼是p2p: peer-to-peer,簡單來說,就是兩個使用者可以直接進行網路通訊。 為什麼我們需要p2p: 1.大多數的網路狀態都是使用者A和使用者B互相通訊,需要一箇中間伺服器來做訊息的中轉。如果可以使用者對使用者直接通訊,那麼可以減輕伺服器壓力。 2.一定程度上

TCPUDP的區別

為什麼網上講到的P2P打洞基本上都是基於UDP協議的打洞?難道TCP不可能打洞?還是TCP打洞難於實現?     假設現在有內網客戶端A和內網客戶端B,有公網服務端S。     如果A和B想要進行UDP通訊,則必須穿透雙方的NAT路由。假設為NAT-A和NAT-B。    

JAVA之長連線、短連線心跳

短連線: client向server發起連線,server接到請求,雙方建立連線,client向server傳送訊息,server迴應client,一次讀寫完成雙方都可以發起close請求 優點:短連線對於伺服器來說較為簡單,存在的連線都是有用的連線,不需要額外的控制。