unix網路程式設計 (一)簡單概念梳理

2021-08-20 04:20:26 字數 2131 閱讀 5433

1.2 socket

基本概念、常見結構體等

int main(int argc,char **argv);
argc:命令列總的引數的個數,即argv中元素的格式。

**argv:字串陣列,用來存放指向你的字串引數的指標陣列,每乙個元素指向乙個引數。

argv[0]:指向程式的全路徑名。

argv[1]:指向在dos命令列中執行程式名後的第乙個字串。

argv[2]:指向第二個字串。

sockaddr_in在標頭檔案#include#include中定義

對於客戶端而言,sin_addr是無需指定的,清零就可以了;

對於伺服器來說,這個是需要指定自己的位址的。

inaddr_any裡面給出了關於這裡的一些解釋:

一般情況下,如果你要建立網路伺服器應用程式,則你要通知伺服器作業系統:請在某位址 ***.***.***.***上的某埠 yyyy上進行偵聽,並且把偵聽到的資料報傳送給我。這個過程,你是通過bind()系統呼叫完成的。——也就是說,你的程式要繫結伺服器的某位址,或者說:把伺服器的某位址上的某埠佔為已用。伺服器作業系統可以給你這個指定的位址,也可以不給你。

如果你的伺服器有多個網絡卡(每個網絡卡上有不同的ip位址),而你的服務(不管是在udp埠上偵聽,還是在tcp埠上偵聽),出於某種原因:可能是你的伺服器作業系統可能隨時增減ip位址,也有可能是為了省去確定伺服器上有什麼網路埠(網絡卡)的麻煩 —— 可以要在呼叫bind()的時候,告訴作業系統:「我需要在 yyyy 埠上偵聽,所有傳送到伺服器的這個埠,不管是哪個網絡卡/哪個ip位址接收到的資料,都是我處理的。」這時候,伺服器程式則在0.0.0.0這個位址上進行偵聽。

獲取時間的埠號是:13.

原型:

int

socket (int domain, int type, int protocol)

功能描述:初始化建立socket物件,通常是第乙個呼叫的socket函式。 成功時,返回非負數的socket描述符;

失敗返回-1。socket描述符是乙個指向內部資料結構的指標,它指向描述符表入口。呼叫socket()函式時,socket執行體將建立乙個socket,實際上」建立乙個socket」意味著為乙個socket資料結構分配儲存空間。

引數:

domain – 指明使用的協議族。常用的協議族有,af_inet,af_unix等等。協議族決定了socket的位址型別,在通訊中必須採用對應的位址。

af_inet決定了要用ipv4位址(32位的)與埠號(16位的)的組合;

af_unix決定了要用乙個絕對路徑名作為位址。

區別:

af_inet是典型的tcp/ip四層模型的通訊過程。

傳送方、接收方依賴ip:port來標識,即將本地的socket繫結到對應的ip埠上,傳送資料時,指定對方的ip埠,經過internet,可以根據此ip埠最終找到接收方;接收資料時,可以從資料報中獲取到傳送方的ip埠。

af_unix典型的本地ipc,類似於管道,依賴路徑名標識傳送方和接收方。

af_inet不僅可以用作本機的跨程序通訊,同樣的可以用於不同機器之間的通訊,其就是為了在不同機器之間進行網路互聯傳遞資料而生。而af_unix則只能用於本機內程序之間的通訊。

type – 指明socket型別,有3種:

sock_stream – tcp型別,保證資料順序及可靠性;

sock_dgram – udp型別,不保證資料接收的順序,非可靠連線;

sock_raw – 原始型別,允許對底層協議如ip或icmp進行直接訪問,不太常用。

protocol – 通常賦值」0」,由系統自動選擇。

網路程式設計梳理

1,seqlite3語句 sqlite3 stu.db 建立資料庫 create table student id int primary key 不可重複 name text 字串型 scoer float 建立表 insert into tablename values 0,lisi 88 增加...

unix網路程式設計(筆記一)

一。1.乙個長時間執行的程式,即守護程序,它只在響應來自網路的請求時才傳送網路訊息。2.通常乙個客和每次只與乙個伺服器通訊,不過以web瀏覽器為例子,該客戶端程式卻可以與多個不同的web伺服器通訊。3.tcp ip 協議簇 也稱為 網際協議簇 4.英特網 和 網際網 網際網路是乙個網際網 網際網是採...

unix網路程式設計 鎖(一)

閱讀了unix網路程式設計的卷二之後,看著裡面的例項並且理解其原理演算法,就將裡面的c語言的鎖api進行c 封裝以供以後使用。實現的鎖介面以及一些演算法會封裝到我的timepass庫中。我覺得應該就鎖的問題寫乙個系列的部落格。鎖按照其作用域可以分為執行緒鎖和程序鎖 按照其工作方式 又可以分為互斥鎖,...