DirectPlay學習筆記 1

2021-04-01 10:57:47 字數 1823 閱讀 1761

教材:directplay的幫助文件

directplay的基本概念

多使用者程式具有兩個基本特徵:

1、兩個及以上的使用者個體,每個都在自己的機器上有著乙個客戶端;

2、網路使得使用者機器間可以互相通訊,或者可以通過乙個專職的伺服器(進行通訊)。

directplay具有簡化多使用者應用程式處理的若干特徵:

·創造並管理點對點(peer-to-peer)及客戶端/伺服器會話;

·在會話中管理使用者及組;

·管理不同網路連線及網路狀況下會話成員間的訊息(傳輸);

·可以使得應用程式與所謂的大廳(lobbies)互相協調配合;

·可以使得使用者用聲音互相通訊(聯絡)。

注意:directplay不保證通訊過程中資訊的安全性。

directplay傳輸協議

協議提供了極其適用多使用者遊戲的大量特徵:

·可靠及不可靠的訊息傳遞。可靠訊息將一直重發直到對方接收;

·連續及不連續的訊息分發。連續訊息會以傳送時的順序達到目的端;

·訊息分塊及重組。如果訊息大小超過了網路傳輸能力,directplay會自動把這些訊息分塊(傳輸)並重組;

·擁塞控制。directplay可以自動「扼殺」outgoing的訊息以使得目標(程式)可以(及時)處理。

(以上兩條,其實就是解決兩個問題,訊息的大小,及單位時間內可以傳送訊息的個數)

·傳送優先順序,以確保重要訊息先傳送。directplay可以制定三種級別低(low)、中(medium)、高(high)。high優先順序的訊息在輸出佇列的前端,然後依次是medium及low優先順序的訊息。

為了能傳遞訊息,多人遊戲中,每個參與者都必須擁有乙個唯一(可識別的)位址。

位址可能會參照應用程式所在機器(裝置位址)或者應用程式需要通訊的機器(主機位址)而確定。

directplay位址的形式同url串,由scheme、scheme分隔符及資料串組成:

x-directplay:/[data string]

資料串中包含若干元素,指出了基於不同型別的網路間傳送者及目的地通訊所需的資訊。

應用中,url串包含在directplay位址物件中,為directplay api所使用。

你可以自行對url串直接解析或應用位址物件的方法來處理資料串中所包含的資料元素。

用directplay物件進行通訊

microsoft directplay由一組***物件組成,每個物件所暴露的介面(可能為乙個,也可能為多個),用來控制實現directplay的不同方面。例如,directplay中peer物件(clsid_directplay8peer)用來管理peer-to-peer遊戲。

通過呼叫介面方法,從而實現directplay物件通訊。例如,peer-to-peer遊戲中,要給其他使用者傳送某些資料,就需要呼叫idirectplay8peer::sendto方法。

directplay與你的應用程式之間的通訊(或者應該說互動)是通過若干(乙個或多個)**函式實現,其機制同視窗的處理過程(通常實現名為wndproc或者msgproc)。你的應用程式需要實現這些函式,並在directplay初始化時,傳遞該函式指標,一旦directplay需要與程式互動,就會呼叫該**函式,並傳入兩個關鍵資訊項:

·訊息標識(id),用以標識訊息型別;

·乙個指向資料塊的指標。典型的資料塊如乙個結構,用來提供更多的詳細資訊。

例如,上面的示範中(指idirectplay8peer::sendto),資訊被傳送到目的地後,目的程式的**函式就會收到乙個dpnmsgid_receive標識的訊息,通知程式有其他使用者資訊到達,而伴隨的結構中包含了這些資料資訊。

由於directplay的眾多訊息是多執行緒的,所以正確實現你的**函式非常關鍵。

DirectPlay學習筆記 1

教材 directplay的幫助文件 directplay的基本概念 多使用者程式具有兩個基本特徵 兩個及以上的使用者個體,每個都在自己的機器上有著乙個客戶端 網路使得使用者機器間可以互相通訊,或者可以通過乙個專職的伺服器 進行通訊 directplay具有簡化多使用者應用程式處理的若干特徵 創造並...

學習筆記1

struct test test int x void fun class test1 test1 int x void fun int main void test1 a 行1 a.fun 行2 test1 b 行3 b.fun 行4 test c 行5 c.fun 行6 test d 行7 d....

學習筆記1

1 字串原地逆序 使用臨時變數 void reverse string s 5 求平均值 避免溢位 int f int x,int y 6 楊氏矩陣 bool young int a m n int x return false 7 十進位制轉十六進製制 string decimaltohexade...