伺服器與客戶端
p94-p98先學習基礎
再學習socket程式設計
參考socket,也叫套接字,描述了計算機是ip位址和埠,電腦程式之間採用socket進行通訊。socket把複雜的tcp/ip協議族隱藏在介面後面,方便使用。
tcp提供流和資料報兩種通訊方式,所以套接字也分為流套接字和資料報套接字
流套接字:有序、可靠、雙向的,型別是sock_stream,有錯誤重傳機制(現在用的更多,主要學習)
資料報套接字:不需要建立或者維持連線,採用udp/ip協議,速度快,不可靠
1)指定ip
伺服器可能有多個網絡卡
m_servaddr.sin_addr.s_addr =
inet_addr
("192.168.149.129");
// 指定ip位址
2)任意ip
m_servaddr.sin_addr.s_addr =
htonl
(inaddr_any)
;// 本主機的任意ip位址
m_servaddr.sin_port =
htons
(5000);
// 通訊埠
struct hostent* h;if(
(h =
gethostbyname
("118.89.50.198"))
==0)// 指定服務端的ip位址。
注意即使socket被斷開,send函式也不會立即報錯。
乙個是用於監聽客戶端的socket,還有乙個是客戶端連線成功後由accept建立的用於與客戶端收發報文的的socket
socket是系統資源,作業系統開啟的socket數量是有限的,在程式退出之前必須關閉已開啟的socket,就像關閉檔案指標一樣,就像delete已分配的記憶體一樣,極其重要。
值得注意的是,關閉socket的**不能只在main函式的最後,那是程式執行的理想狀態,還應該在main函式的每個return之前關閉。
函式宣告:
int
socket
(int domain,
int type,
int protocol)
;
domain:協議族,一般填af_inet
type:socket型別,一般填sock_stream
protocol:指定協議,一般為0
函式宣告:
struct hostent *
gethostbyname
(const
char
*name)
;
name:網域名稱或ip位址
返回hostent結構體指標,用於客戶端
int
connect
(int sockfd,
struct sockaddr * serv_addr,
int addrlen)
;
功能:將sockfd對應的socket連線至serv_addr指定的服務端
sockfd:已經建立好的socket對應的id
serv_addr:指定服務端的結構體
addrlen:serv_addr結構體對應的長度
成功返回0,失敗返回-1
int
bind
(int sockfd,
const
struct sockaddr *addr,socklen_t addrlen)
;
功能:服務端用於把通訊的位址和埠繫結到socket上
sockfd:socket對應的id
addr:存放了服務端用於通訊的位址和埠
addrlen:addr結構體的長度
可能出錯的原因:位址無效,或者埠被占用
函式宣告:
int
listen
(int sockfd,
int backlog)
;
sockfd:是已經被繫結的socket對應的id
listen函式把主動連線套接字變為被動連線的套接字,使得這個socket可以接受其它socket的連線請求,從而成為乙個服務端的socket。
int
accept
(int sockfd,
struct sockaddr *addr,socklen_t *addrlen)
;
功能:accept函式等待客戶端的連線,如果沒有客戶端連上來,它就一直等待,這種方式稱之為阻塞,連線成功後建立新的套接字,服務端程式用這個新的套接字和客戶端進行報文的收發
服務端:socket->bind->listen->accept->recv/send->close
客戶端:socket->connect->send/recv->close
網路基礎 Socket程式設計
tpc的服務端要先監聽乙個埠,一般是先呼叫bind函式,給這個soket賦予乙個ip位址和埠。當服務端有了ip和埠號,就可以呼叫listen函式進行監聽。這時候客戶端就可以發起連線了。在作業系統中,為每個socket維護兩個佇列。乙個是已經建立了連線的佇列,三次握手已完畢,處於established...
網路基礎之 網路基礎,socket程式設計
1 什麼是socket 網路基礎 socket 2 為何要學習socket程式設計 基於socket開發乙個c s或者b s結構的軟體 client 網路 server browser 網路 server 3 如何基於socket程式設計 網路 網路是什麼 底層的物理連線介質 網際網路通訊協議 os...
網路基礎與socket程式設計
1.osi七層模型 下 上 物理層 資料鏈路層 網路層 傳輸層 會話層 表示層 應用層 2.tcp ip 五層模型 下 上 1 物理層 乙太網協議 負責光 電訊號的傳遞方式。比如 網線 雙絞線 同軸電纜 光纖 wifi等。物理層的能力決 定了最大傳輸速率 傳輸距離 抗干擾等。工作在物理層的集線器 實...