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等。協議族決...