Socket通訊 資料結構WSADATA

2021-07-24 00:09:30 字數 2271 閱讀 9529

資料結構wsadata  

twsadata = packed record

wversion: word;

whighversion: word;

szdescription: array[0..wsadescription_len] of char;

szsystemstatus: array[0..wsasys_status_len] of char;

imaxsockets: word;

imaxudpdg: word;

lpvendorinfo: pchar;

end;

wversion中存放的是windows sockets dll期望程式使用的版本號;whighversion是windows sockets dll所支援的最高版本號,一般情況下,whighversion等於wversion;

szdescription是乙個以』\0』結尾的字串,長度最長為256個字元,windows sockets dll將sockets實現的描述(包括sockets開發商的標識資訊)拷貝到該字串中,在程式設計中,szdescription一般用來顯示系統或程式的狀態資訊;

szsystemstatus是乙個以』\0』結尾的字串,windows sockets dll將系統的相關狀態、配置資訊拷貝到該字串中,如果該資訊對使用者、支援廠商有用的話,windows sockets dll應利用該字串,一般來講,不把它看作szdescription的擴充套件;

imaxsockets 指明單個程序可以開啟的最大sockets數目,任何乙個windows sockets實現都會提供乙個全域性變數「sockets池」,用於為每個程序分配sockets,分配的數目會很好地反映windows sockets dll或網路軟體的配置方式,作為程式設計人員,我們可以利用這個數字來粗略地估計一下該windows sockets實現是否適用於我們開發的程式,例如,在x windows伺服器環境下,伺服器第一次啟動時會檢查imaxsockets,如果imaxsockets小於8,應用程式會顯示一條錯誤資訊,告訴使用者需要重新配置網路軟體,在這種情況下,很少使用的szsystemstatus就派上用場了。很明顯,誰也保證不了應用程式能夠開啟imaxsockets個sockets,因為系統中可能有其他的windows sockets應用程式在使用sockets;

imaxudpdg 指明windows sockets應用程式可以接收或傳送的最大udp(使用者資料文報協議)資料文報的大小(以位元組表示),如果sockets實現不加以限制,imaxudpdg則預設為0,而在許多伯克利sockets實現中,對udp資料文報有乙個隱含的限制:8192位元組,如果必要的話,可以將資料文報分成幾段接收或傳送,在相容的windows sockets實現中,imaxudpdg的最小值通常是512位元組;

lpszvendorinfo是乙個長指標,指向乙個開發商專用的資料結構,該變數與程式設計關係不大,在這裡我們就不**它的具體結構了。

在程式設計過程中,首先要做的工作是初始化,程式是通過呼叫函式wsastartup()來實現的,其作用是初始化windows 套接字的動態連線庫(sockets dll)。需要注意的是,該函式必須是程式或dll(動態連線庫)呼叫的所有sockets函式中的第乙個sockets函式,其他套接字函式都是以該函式為基礎的,只有該函式呼叫成功了,程式才能呼叫其他sockets api(應用程式介面)函式,否則,程式就是無源之水,無本之木。所以,在程式的入口處,呼叫socketsinitialize函式,在該函式內部呼叫wsastartup()函式。

wsastartup()的另乙個作用是獲得windows sockets api的版本號。我們知道,不同的作業系統有著不同的sockets實現,即使是同一種作業系統,比如,都是windows作業系統,但由於存在版本上的差異,sockets的實現還是有差別的。為了將來程式的可移植性,有必要先判斷平台所提供的sockets dll的版本號。呼叫wsastartup()的程式與windows sockets dll互相告訴對方彼此支援的最高版本,並確認是否能夠支援對方的最高版本。呼叫wsastartup()後,windows sockets dll檢查程式需要的sockets版本號,如果該版本高於dll所支援的最低版本號,那麼,程式就會成功呼叫函式wsastartup(),並返回版本號,dll在資料型別wsadata的whighversion中存入支援的最高版本號,在wversion中存放whighversion和ws_version_reqd二者中的最小值,從此往後,windows sockets dll就認為程式所使用的版本號是wversion。

如果無法接受wversion中的版本號,那麼,程式就應該進一步查詢其他的windows sockets dll或通知使用者「初始化失敗」。  

socket程式設計中相關資料結構

分類 socket程式設計 2008 09 20 18 29 801人閱讀收藏 舉報 socket 程式設計struct 資料結構 null 網路hostent 資料結構 struct hostent 詳細資料 h name 主機的正式名稱 h aliases 空位元組 主機的別名 h addrty...

socket通訊傳送結構體

socket通訊可以直接傳送結構體!示例 傳送端 c sharp view plain copy struct student struct student student1 接受端 c sharp view plain copy struct student struct student stud...

C 和 C 結構體Socket通訊

最近在用c 做乙個專案的時候,socket傳送訊息的時候遇到了服務端需要接收c 結構體的二進位制資料流,這個時候就需要用c 仿照c 的結構體做出乙個結構來,然後將其轉換成二進位製流進行傳送,之後將響應訊息的二進位制資料流轉換成c 結構。1 仿照c 結構體寫出c 的結構來 using system.r...