WIndows API SOCKET程式設計

2021-10-24 21:30:10 字數 2102 閱讀 8794

## 標題基於vs2010下得windows socket 程式設計

首先匯入winsock windows庫,重要的一點就是要將ws2_32.lib這個庫匯入工程檔案中,可以用這個語句實現

#pragma comment(lib, 「ws2_32.lib」)

wsadata wsdata;

if(wsastartup(makeword(2, 2), &wsdata) != 0)//初始化載入

sockser = socket(af_inet, sock_stream, ipproto_tcp);//建立伺服器套接字

addser.sin_family = af_inet;

addser.sin_addr.s_addr = inet_addr("0.0.0.0");

addser.sin_port = htons(10010);

bind(sockser, (sockaddr*)&addser, nsize);

listen(sockser, 4);

wsadata,一種分子結構。這個結構被用來儲存被wsastartup函式呼叫後返回的windows sockets資料。它包含winsock.dll執行的資料。

使用socket函式建立套接字socket函式描述,第乙個引數為網路位址型別,第二個引數為套接字型別,我選的時資料報套接字型別。addser配合下面的bind監聽函式,使得我可以監聽哪個埠。inet_addr方法可以轉化字串,主要用來將乙個十進位制的數轉化為二進位制的數,用途多於ipv4的ip轉化。htons轉化為網路位元組序。

sockaddr_in addcli1;//存放客戶端資訊,埠,以及位址

sock = accept(sockser, (sockaddr*)&addcli1, &nsize);

為了保證伺服器能同時與幾個客戶端連線,我們在accept處可以設定乙個死迴圈,等待連線。每乙個連線開啟乙個接收的執行緒,以保證能響應客戶端的請求。

createthread

(null,0

, threadr,

(lpvoid)number.

top(),

0,null);

//建立接受執行緒

如果想實現單個客戶端併發請求,就得在處理每乙個請求得時候使用乙個新的連線,所謂新得連線就是客戶端再次connect,所產生的套接字。

服務端基本的建立就是如此,可以併發處理客戶端的多個請求。

客戶端前面的操作與服務端一致

wsadata wsadata;if(

wsastartup

(makeword(2

,2),

&wsadata)!=0

) sockser =

socket

(af_inet, sock_stream, ipproto_tcp)

; addser.sin_family = af_inet;

addser.sin_addr.s_addr =

inet_addr

("0.0.0.0");

addser.sin_port =

htons

(10010

);

inet_addr裡的位址是伺服器主機所在位址。埠是伺服器開放的埠。

接著就是連線!

connect

(sockser,

(sockaddr*

)&addser,

sizeof

(sockaddr));

//連線

hrecv =

createthread

(null,0

, threadrecv,

null,0

,null

);

在連線客戶端以後同時開啟接收的執行緒,注意這接收的執行緒只是用來指示下一步的操作的例如接收到某個標誌以後開啟某個執行緒,執行緒中再次connect,需要注意的是connect中的第乙個引數我們得重新使用socket生成,要不然在資料傳輸得時候不會使用新連線。

客戶端基本的處理就是如此。

靜態聯編與動態聯編

在c 中,多型性主要是通過函式過載實現的。過載函式是指程式中對同名函式進行呼叫時,編譯器會根據函式引數的型別和個數,決定該呼叫哪一段函式 來處理這個函式呼叫。這種把函式呼叫與適當的函式 相對應的動作,叫做聯編。聯編分為靜態聯編和動態聯編。在編譯階段決定執行哪個同名的被呼叫函式,稱為靜態聯編。在編譯階...

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...

靜態聯編和動態聯編

聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...