href="file:///e:/temp/msohtml1/01/clip_filelist.xml" rel="file-list" />c/s模式
server:
根據請求提供服務 1
.開啟乙個通訊通道並告知本地計算機,它願意在某一位址和埠上接受客戶請求 2
.等待客戶請求到達埠 3
.接收到重複服務請求,處理該請求並傳送應答訊號。 4
.返回2
,等待另一客戶請求 5
.關閉服務
client 1.
開啟乙個通訊通道,並連線到伺服器所在主機的特定埠 2.
向伺服器傳送服務請求報文,等待並接受應答,繼續提出請求 3.
請求結束後關閉
套接字型別
流式套接字(
sock_stream)
資料報式套接字
(sock_dgram)
原始套接字
(sock_raw)
基於tcp
的socket程式設計
服務端
1.建立
socket 2
.將socket
繫結到乙個本地位址和埠上(
bind)
3.將socket
設為監聽模式,準備接受客戶請求(
listen)
4.等待客戶請求到來:當請求到來後,接受連線請求,返回乙個
對應於此次鏈結的套接字(
accept)
5.用返回的套接字和客戶端進行通訊(
send
、recv)
6.返回,等待另乙個客戶請求 7
.關閉套接字
客戶端 1
.建立套接字(
socket)
2.向伺服器發出鏈結請求(
connect)
3.和伺服器進行通訊(
send
、recv)
4.關閉套接字
服務端呼叫
accept
後就會等待,等待客戶端發
connnect
,然後服務端接受該請求。伺服器需要告訴本地主機它用哪個ip:
port
來等待客戶請求,所以需要用
bind
函式。客戶不需要,它發起連線,服務端接收到鏈結後會知道它用哪個ip:
port
基於udp
的socket程式設計
服務端
1.建立套接字(
socket)
2.將套接字繫結到乙個到乙個本地位址和埠上(
bind)
3.等待接受資料(
recvfrom)
4.關閉套接字
客戶端
1.建立套接字(
socket)
2.向伺服器傳送資料(
sendto)
3.關閉套接字
相關函式
intwsastartup( word wversionrequested, lpwsadata lpwsadata );
載入套接字型檔,進行套接字型檔的版本協商,確定使用的
socket版本
wversionrequested
用來指定準備載入的
winsock
庫的版本,高位位元組指定所需要的
winsock
庫的副版本,而低位位元組則是主版本。
socket函式
socket(int af,int type int protocal) af
指定位址族
只能是ad_inet
type
指定socket
型別sock_stream sock_dgram
protocol
0,系統自動選擇合適協議
bind函式
將套接字繫結到本地某個位址和埠上
int bind( socket s, const struct sockaddr far* name, int namelen )
第乙個引數是要繫結的套接字
第二個引數指定該套接字的本地之資訊
struct sockaddr
可以使用
sockaddr_in
替換sockaddr
sockaddr_in
in_addrs_un_b;
struct s_un_w;
u_long s_addr;
}s_un; }
inet_addr
和inet_ntoa函式
可以將ip
位址指定為
inaddr_any
,允許套接字向任何分配給本機的
ip位址傳送或接收資料。
如果只想讓套接字使用多個
ip中的乙個位址,就必須指定實際位址
unsigned long inet_addr( const char far* cp );
inet_addr
函式需要乙個字串作為引數,用點分十進位制
inet_ntoa
做相反的轉換
int listen( socket s,int backlog )
第二個引數是等待連線佇列的最大長度,如果設定為
somaxconn
,那麼下層的服務提供者將負責將這個套接字設定為最大合理值。
socket accept(socket s,struct sockaddr far* addr,int far* addrlen)
第乙個引數指定的套接字已經通過
listen
函式將其設定為監聽狀態,第二個引數指向乙個緩衝區的指標,儲存客戶的ip和
port
,該緩衝區用來接收連線實體的位址
int send( socket s,const chat far* buf,int len,int flags )
第四個引數一般為0即可
int recv( socket s,const far* buf,int len,int flags )
int connect( socket s, const struct sockaddr far* name, int namelen )
u_short htons( u_short hostshort ); u_short
型別的值從主機位元組順序轉換為
tcpip
網路位元組順序
u_long htonl( u_long hostlong )
功能類似
例子:
tcpsrvtcpclient
建立socketsocksrv
建立socket sockclient 建立
sockaddraddrsrvconnect
bindsocksrv
和addrsrv
listen
將socket
設為監聽模式,
準備接受客戶請求
while(1)
UNIX網路程式設計總結 基礎篇
在網路通訊中客戶 伺服器這種模式可以說是最普遍的,而我們所說的套接字程式設計,就是利用一層在應用層與運輸層的介面,來編寫應用程式,我們的資訊以此在網路中互動。另外在以後的高階部分我們還將看到繞過傳輸層的原始套接字甚至繞過ip層直接讀取鏈路層的幀 1.那麼為什麼套接字提供的是應用層與運輸層間的介面呢?...
IOS開發網路篇 網路程式設計基礎
ios開發網路篇 網路程式設計基礎 一 為什麼要學習網路程式設計 1.簡單說明 在移動網際網路時代,移動應用的特徵有 2 只有通過網路跟外界進行資料互動 資料更新,應用才能保持新鮮 活力 3 如果沒有了網路,也就缺少了資料變化,無論外觀多麼華麗,終將變成一潭死水 流動網路應用 良好的ui 良好的使用...
iOS開發網路篇 網路程式設計基礎
一 為什麼要學習網路程式設計 1.簡單說明 在移動網際網路時代,移動應用的特徵有 2 只有通過網路跟外界進行資料互動 資料更新,應用才能保持新鮮 活力 3 如果沒有了網路,也就缺少了資料變化,無論外觀多麼華麗,終將變成一潭死水 流動網路應用 良好的ui 良好的使用者體驗 實時更新的資料 電商 京東 ...