套接字網路程式設計筆記

2021-06-07 05:25:21 字數 2115 閱讀 1578

1.呼叫

int send( __in  socket s, __in  const char* buf, __in  int len, __in  int flags); 

發出的資料報,在傳送過程中,雖然順序不會把打亂,但可能會拆分成多個包,這樣,只呼叫一次

int recv( __in   socket s, __out  char* buf, __in   int len, __in   int flags); 

可能不能被完整地接收。

解決的方法是,定義tcp

之上的協議,即應用層協議,指示資料報長度。最簡單的實現為:

void sendfn(socket s, char* data, int len)

//完整接收指定長度資料報

void recvfns(socket s, char* buff, int len)

void recvfn(socket s)

}

2.tcp

通訊時,伺服器用

socket accept( __in     socket s, __out    struct sockaddr* addr, __inout  int* addrlen); 

建立的套接字共同占用乙個埠,即伺服器監聽埠。

為什麼要這麼做:客服端套接字指定通訊對方的埠就是監聽埠,沒有理由找乙個使用其它埠的套接字跟它連線。

為什麼能這麼做:tcp

報文中,包含源埠,與目標埠,再加上

ip層的源

ip位址及目標

ip位址,這四個資訊,就是運輸層多路分解中,所需要的四元組,意思是可以唯一確定乙個

tcp連線。當從

ip層,解包資料後,就可以根據四元組,找到這些資料的目標

tcp連線。這點跟

udp連線是有區別的,因為

udp多路分解時只使用目標

ip位址及目標埠,所以,只要目標

ip為本機

ip,目標埠為監聽埠的,

udp連線都會定向到乙個

upd連線。這意味,

udp是乙個一對多的連線(確切地說

upd不能叫連線)。

3.阻塞套接字可以在recv

的同時,呼叫

send。

4.互答通訊模式(時間緊,未仔細考慮非阻塞模式)。互答通訊指的是,雙方都可能主動地向對方發請求。這意味著雙方都必須實時監聽著對方的請求。監聽是會阻塞執行緒的,所以程式不可能是單線的(羅雲彬書上聊天室例子介紹了互答通訊的解決方案,而且用的是單執行緒, 但其實在模擬多執行緒,而且在多回合會話中,整個流程很難被維護)。再考慮如何使用連線。同乙個套接字雖然可以在recv

同時呼叫

send

,但不能同時呼叫

recv

,因為多個執行緒會搶奪資料,導致混亂。只使用乙個套接字,這種情況是會發生的,比如,監聽執行緒呼叫

recv

堵在那時,其它執行緒呼叫

send

後,又用

recv

來等待對方的回應,這時就有衝突了。所以套接字至少要有兩個。乙個用於被動會話(監聽),乙個用於主動會話。

5.socket型別是乙個控制代碼,有點指標的性質,並且

accept

會分配socket

物件,所以可以看成在堆上的指標,直接傳給新執行緒當引數:

client = ::accept(s, (sockaddr*)&remoteaddr, &naddrlen);

if(client == invalid_socket)

continue;

_beginthreadex(null, null, sserverthread, &client, null, null);//不存在缺陷,因為socket是控制代碼,相當於指標,typedef uint_ptr socket;

6.位元組順序。只有與網路協議棧本身的資料的位元組順序是與主機的相反的,自己的資料,傳送出去是什麼樣,接受後就是什麼樣。位元組倒序,是以位元組為單位:如

0x1234

倒序後成

0x3412

7.win+r執行

perfmon.msc

可以檢視網路連線狀況。

套接字網路程式設計筆記

1.呼叫 intsend insockets,inconstchar buf,inintlen,inintflags 發出的資料報,在傳送過程中,雖然順序不會把打亂,但可能會拆分成多個包,這樣,只呼叫一次 intrecv insockets,outchar buf,inintlen,inintfla...

網路套接字程式設計

1。位元組序 小位元組 低位儲存在低位元組 大位元組 低位儲存在高位元組 簡單程式判斷 int islittle 2.hostent結構 struct hostent define h addr h addr list 0 這裡是這個資料結構的詳細資料 struct hostent h name 位...

網路程式設計套接字

建立 函式原型 int socket int domain int type int protocol 引數說明 domain 協議域,又稱協議族 family 常用的協議族有af inet af inet6 af local 或稱af unix,unix域socket af route等。協議族決...