socket是對tcp/ip協議的封裝,socket本身並不是協議,而是乙個針對tcp和udp程式設計的介面(api),通過socket,我們才能使用tcp/ip協議。socket的出現只是使得程式設計師更方便地使用tcp/ip協議棧而已,是對tcp/ip協議的抽象,從而形成了我們知道的一些最基本的函式介面。
一.利用socket建立網路連線的步驟
建立socket連線至少需要一對套接字,其中乙個執行於客戶端,稱為clientsocket ,另乙個執行於伺服器端,稱為serversocket 。
套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。
1。伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態,等待客戶端的連線請求。
2。客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求。
3。連線確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求時,就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連線。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。
二.socket 一般有兩種型別:tcp 套接字和 udp 套接字
1.使用 tcp 通訊
tcp 伺服器端工作的主要步驟如下:
步驟 1 呼叫 serversocket(int port)建立乙個 serversocket,並繫結到指定埠上。
步驟 2 呼叫 accept(),監聽連線請求,如果客戶端請求連線,則接受連線,返回通訊套接字。
步驟 3 調 用 socket 類 的 getoutputstream() 和 getinputstream() 獲 取 輸 出 和 輸 入 流,開始網路資料的傳送和接收。
步驟 4 關閉通訊套接字。
// 建立乙個 serversocket 物件
serversocket serversocket = null;
try catch (interruptedioexception e) catch (ioexception e) finally catch (ioexception e)
}}
tcp 客戶端工作的主要步驟如下:
步驟 1 呼叫 socket() 建立乙個流套接字,並連線到伺服器端。
步驟 2 調 用 socket 類 的 getoutputstream() 和 getinputstream() 方 法 獲 取 輸 出 和 輸 入流,開始網路資料的傳送和接收。
步驟 3 關閉通訊套接字。
try catch (unknownhostexception e) catch (ioexception e)
2.使用 udp 通訊
udp 伺服器端工作的主要步驟如下:
步驟 1 呼叫 datagramsocket(int port) 建立乙個資料報套接字,並繫結到指定埠上。
步驟 2 呼叫 datagrampacket(bytebuf,int length),建立乙個位元組陣列以接收 udp 包。
步驟 3 呼叫 datagramsocket 類的 receive(),接受 udp 包。
步驟 4 關閉資料報套接字。
// 接收的位元組大小,客戶端傳送的資料不能超過 max_udp_datagram_len
byte lmsg = new byte[max_udp_datagram_len];
// 例項化乙個 datagrampacket 類
datagrampacket dp = new datagrampacket(lmsg, lmsg.length);
// 新建乙個 datagramsocket 類
datagramsocket ds = null;
try catch (socketexception e) catch (ioexception e) finally
}
udp 客戶端工作的主要步驟如下:
步驟 1 呼叫 datagramsocket() 建立乙個資料報套接字。
步驟 2 呼叫 datagrampacket(bytebuf,int offset,int length,inetaddress address,int port),建立要傳送的 udp 包。
步驟 3 呼叫 datagramsocket 類的 send() 傳送 udp 包。
步驟 4 關閉資料報套接字。
// 定義需要傳送的資訊
string udpmsg = "hello world from udp client " + udp_server_port;
// 新建乙個 datagramsocket 物件
datagramsocket ds = null;
try catch (socketexception e) catch (unknownhostexception e) catch (ioexception e) catch (exception e) finally
}
網路程式設計 Python網路程式設計詳解socket
1 伺服器就是一系列硬體或軟體,為乙個或多個客戶端 服務的使用者 提供所需的 服務 它存在唯一目的就是等待客戶端的請求,並響應它們 提供服務 然後等待更多請求。2 客戶端 伺服器架構既可以應用於計算機硬體,也可以應用於計算機軟體。3 在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽...
linux socket網路程式設計之socket屬性
1.函式用法 include include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen 函式用於獲得某個套接字的屬性 int setsockopt int sockfd,int level...
sock程式設計學習2
面向連線的服務sock stream sock seqpacket,在開始交換資料之前,需要在請求服務的程序套接字和提供服務的程序套接字之間建立乙個連線 客戶端通過呼叫connect.int connect int sockfd const struct addr,socklen t len 在co...