Windows平臺上實現P2P服務(三)

咱們已經創建好一個UDP的服務程序了,下面咱們要給這個服務程序添加服務內容了。緩存

其服務內容將根據通信的客戶端請求來進行定義和處理。首先咱們再回顧一下通信內容的定義:安全

/// <summary>信息結構的指針型</summary>
typedef struct _message *lp_message;
/// <summary>信息結構</summary>
typedef struct _message
{
	union {
		struct { char buff[1030]; };
		struct { char cmd[6]; char rt_code[32]; char data[992]; };
	};
	SOCKADDR_IN addr;
};

通信內容大體分爲三部分,第一個部分爲6字節的命令名稱,第二部分爲32字節的運行碼,第三部分爲數據區。那麼咱們的服務內容將根據前6位的命令名稱來提供,這須要咱們先定義一個服務內容的基本函數結構,將來的其餘概念均可以沿用這一格式來進行定義。函數

void do<command>(lp_message msg)
{
	... ...
}

函數只有一個參數,就是咱們上面定義的信息結構的指針。因爲咱們在接受信息時其客戶端信息也是採用這個結構的addr來進行的,也就是說客戶端的通信信息也存儲在這一結構中了,這就使得咱們能夠在函數內完成回送等複雜業務。編碼

咱們首先定義一個註冊和登陸函數,這兩個函數是服務的基礎,這兩個命令不一樣於其餘的命令信息,他們在運行時用戶信息還沒有創建,所以不存在rt_code的內容,所以咱們在處理過程當中也不會用到rt_code,咱們會直接使用buff來進行處理。加密

在這裏我先作個聲明,講解一下系統安全機制,系統將根據用戶的「應用編碼」、「設備編碼」+「用戶名」、「口令」的方式進行驗證,系統在驗證經過後,將向客戶端發送一個rt_code做爲從此通信的入口,這個rt_code在每次登錄後都會從新定義,同時咱們還能夠設定一個rt_code的有效期,所以,在登陸後咱們在通信過程當中,只須要提供rt_code就能夠完成認證,這將隱含掉用戶的其餘重要信息,簡介的防止了客戶信息被泄露,若是基於安全的須要咱們還能夠採用時間戳技術將時間戳增長到通信內容中,同時利用這個時間戳對rt_code進行加密處理,我在這裏就不在詳細描述了,你們能夠根據本身的須要對這一機制進行完善和補充,咱們這裏主要實現這一機制的最簡單方式。指針

系統須要將用戶信息,以及rt_code進行緩存,在這裏咱們使用一種簡單的鏈表結構進行存儲,這種結構十分簡單,同時支持添加修改和刪除,簡單便於查找和定位。code

相關文章
相關標籤/搜索