一、客戶機/伺服器模式
在tcp/ip網路中兩個程序間的相互作用的主機模式是客戶機/伺服器模式(client/server model)。該模式的建立基於以下兩點:1、非對等作用;2、通訊完全是非同步的。客戶機/伺服器模式在操作過程中採取的是主動請示方式:
首先伺服器方要先啟動,並根據請示提供相應服務:(過程如下)
1、開啟一通訊通道並告知本地主機,它願意在某乙個公認位址上接收客戶請求。
2、等待客戶請求到達該埠。
3、接收到重複服務請求,處理該請求並傳送應答訊號。
4、返回第二步,等待另一客戶請求
5、關閉伺服器。
客戶方:
1、開啟一通訊通道,並連線到伺服器所在主機的特定埠。
2、向伺服器傳送服務請求報文,等待並接收應答;繼續提出請求……
3、請求結束後關閉通訊通道並終止。
二、基本套接字
為了更好說明套接字程式設計原理,給出幾個基本的套接字,在以後的篇幅中會給出更詳細的使用說明。
1、建立套接字——socket()
功能:使用前建立乙個新的套接字
格式:socket pascal far socket(int af,int type,int procotol);
引數:af: 通訊發生的區域
type: 要建立的套接字型別
procotol: 使用的特定協議
2、指定本地位址——bind()
功能:將套接字位址與所建立的套接字型大小聯絡起來。
格式:int pascal far bind(socket s,const struct sockaddr far * name,int namelen);
引數:s: 是由socket()呼叫返回的並且未作連線的套接字描述符(套接字型大小)。
其它:沒有錯誤,bind()返回0,否則socket_error
位址結構說明:
struct sockaddr_in
3、建立套接字連線——connect()和accept()
功能:共同完成連線工作
格式:int pascal far connect(socket s,const struct sockaddr far * name,int namelen);
socket pascal far accept(socket s,struct sockaddr far * name,int far * addrlen);
引數:同上
4、監聽連線——listen()
功能:用於面向連線伺服器,表明它願意接收連線。
格式:int pascal far listen(socket s, int backlog);
5、資料傳輸——send()與recv()
功能:資料的傳送與接收
格式:int pascal far send(socket s,const char far * buf,int len,int flags);
int pascal far recv(socket s,const char far * buf,int len,int flags);
引數:buf:指向存有傳輸資料的緩衝區的指標。
6、多路復用——select()
功能:用來檢測乙個或多個套接字狀態。
格式:int pascal far select(int nfds,fd_set far * readfds,fd_set far * writefds,
fd_set far * exceptfds,const struct timeval far * timeout);
引數:readfds:指向要做讀檢測的指標
writefds:指向要做寫檢測的指標
exceptfds:指向要檢測是否出錯的指標
timeout:最大等待時間
7、關閉套接字——closesocket()
功能:關閉套接字s
格式:bool pascal far closesocket(socket s);
Socket實現套接字通訊
套接字工作流程 import socket 1 買手機 phone socket.socket 2 繫結手機卡 phone.bind 127.0.0.1 8080 3 開機 phone.listen 5 4 等 連線 conn,addr phone.accept 5 收發訊息 data conn.r...
套接字通訊
利用三元組 ip位址,協議,埠 就可以標識網路的程序 socket即是一種特殊的檔案,一些socket函式就是對其進行的操作 讀 寫io 開啟 關閉 socket是 open write read close 模式的一種實現,那麼socket就提供了這些操作對應的函式介面 tcp通訊中的socket...
套接字通訊
套接字家族的名字 af unix unix一切皆檔案,基於檔案的套接字呼叫的就是底層的檔案系統來取資料,兩個套接字程序執行在同一機器,可以通過訪問同乙個檔案系統間接完成通訊 套接字家族的名字 af inet 還有af inet6被用於ipv6,還有一些其他的位址家族,不過,他們要麼是只用於某個平台,...