計(jì)算機(jī)網(wǎng)絡(luò)高頻(四)socket網(wǎng)絡(luò)編程
1.請(qǐng)說說socket網(wǎng)絡(luò)編程的步驟。???
UDP的網(wǎng)絡(luò)編程:
客戶端的基本流程如下:
- 創(chuàng)建UDP套接字(socket):使用socket庫的socket()函數(shù)創(chuàng)建一個(gè)UDP套接字。
- 可選地綁定本地地址和端口:使用bind()函數(shù)將套接字綁定到一個(gè)本地地址和端口。
- 發(fā)送數(shù)據(jù)包給服務(wù)端:使用sendto()函數(shù)將數(shù)據(jù)包發(fā)送給服務(wù)端,需要指定目標(biāo)地址和端口。
- 等待接收來自服務(wù)端的響應(yīng)數(shù)據(jù)包(可選):使用recvfrom()函數(shù)從服務(wù)端接收數(shù)據(jù)包,這是一個(gè)阻塞操作,直到接收到數(shù)據(jù)或超時(shí)。
- 關(guān)閉套接字:使用close()函數(shù)關(guān)閉客戶端的套接字。
服務(wù)端的基本流程如下:
- 創(chuàng)建UDP套接字(socket):使用socket庫的socket()函數(shù)創(chuàng)建一個(gè)UDP套接字。
- 將套接字綁定到一個(gè)本地地址和端口:使用bind()函數(shù)將套接字綁定到一個(gè)本地地址和端口,使其可以接收來自客戶端的數(shù)據(jù)包。
- 開始監(jiān)聽來自客戶端的數(shù)據(jù)包:使用recvfrom()函數(shù)從客戶端接收數(shù)據(jù)包,這是一個(gè)阻塞操作,直到接收到數(shù)據(jù)或超時(shí)。
- 接收客戶端發(fā)送的數(shù)據(jù)包:使用recvfrom()函數(shù)接收客戶端發(fā)送的數(shù)據(jù)包,并獲取客戶端的地址和端口。
- 可選地處理接收到的數(shù)據(jù)包并給客戶端發(fā)送響應(yīng)數(shù)據(jù)包:對(duì)接收到的數(shù)據(jù)包進(jìn)行處理,并使用sendto()函數(shù)將響應(yīng)數(shù)據(jù)包發(fā)送給客戶端。
- 可選地繼續(xù)監(jiān)聽并處理其他客戶端的請(qǐng)求:使用一個(gè)循環(huán)來持續(xù)監(jiān)聽和處理多個(gè)客戶端的請(qǐng)求。
- 關(guān)閉套接字:使用close()函數(shù)關(guān)閉服務(wù)端的套接字
TCP的網(wǎng)絡(luò)編程:
服務(wù)端流程:
- 創(chuàng)建服務(wù)端的TCP套接字:使用
socket()
函數(shù),指定地址類型(IPv4或IPv6)、socket類型(如SOCK_STREAM)和協(xié)議(如IPPROTO_TCP)。 - 綁定套接字到指定的IP地址和端口號(hào):使用
bind()
函數(shù),傳入套接字、本地地址和端口號(hào)。 - 開始監(jiān)聽連接請(qǐng)求:使用
listen()
函數(shù),傳入套接字和等待連接的最大數(shù)量。 - 接受來自客戶端的連接請(qǐng)求:使用
accept()
函數(shù),在一個(gè)循環(huán)中等待客戶端連接,并創(chuàng)建新的套接字來與客戶端通信。 - 與客戶端通信:使用新的套接字進(jìn)行數(shù)據(jù)傳輸,如使用
read()
函數(shù)接收客戶端發(fā)送的數(shù)據(jù)并使用write()
函數(shù)發(fā)送響應(yīng)數(shù)據(jù)給客戶端。 - 當(dāng)通信結(jié)束時(shí),關(guān)閉與客戶端的套接字:使用
close()
函數(shù),傳入套接字。
客戶端流程:
- 創(chuàng)建客戶端的TCP套接字:使用
socket()
函數(shù),指定地址類型(IPv4或IPv6)、socket類型(如SOCK_STREAM)和協(xié)議(如IPPROTO_TCP)。 - 連接到服務(wù)端的IP地址和端口號(hào):使用
connect()
函數(shù),傳入套接字、服務(wù)端地址和端口號(hào)。 - 向服務(wù)端發(fā)送請(qǐng)求或數(shù)據(jù):使用
write
函數(shù)向服務(wù)端發(fā)送請(qǐng)求或數(shù)據(jù)。 - 等待接收服務(wù)端返回的響應(yīng)數(shù)據(jù):使用
read()
函數(shù)接收服務(wù)端發(fā)送的響應(yīng)數(shù)據(jù)。 - 處理服務(wù)端的響應(yīng)數(shù)據(jù)。
- 當(dāng)通信結(jié)束時(shí),關(guān)閉客戶端的套接字:使用
close()
函數(shù),傳入套接字。
2.請(qǐng)說說socket網(wǎng)絡(luò)編程的接口。??
- 創(chuàng)建套接字:socket()函數(shù)。
- 綁定套接字:bind()函數(shù)。
- 監(jiān)聽連接:listen()函數(shù)。
- 接受連接:accept()函數(shù)。在接受連接后,會(huì)返回一個(gè)新的套接字用于與客戶端通信。
- 連接服務(wù)器:connect()函數(shù)。
- 發(fā)送數(shù)據(jù):使用write()函數(shù),將數(shù)據(jù)從套接字發(fā)送給目標(biāo)主機(jī)。寫入的字節(jié)數(shù)可以通過返回值進(jìn)行檢查。
- 接收數(shù)據(jù):使用read()函數(shù),從套接字讀取數(shù)據(jù)。讀取的字節(jié)數(shù)可以通過返回值進(jìn)行檢查。
- 關(guān)閉套接字:close()函數(shù)。
3. 什么是Socket?
Socket(套接字)是一種在計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行通信的抽象概念。它提供了一種機(jī)制,使得不同計(jì)算機(jī)之間能夠建立連接并進(jìn)行數(shù)據(jù)交換。
在網(wǎng)絡(luò)通信中,Socket可以被視為一個(gè)端點(diǎn),它通過網(wǎng)絡(luò)連接與其他應(yīng)用程序進(jìn)行通信。Socket可以分為兩種類型:服務(wù)器端套接字(Server Socket)和客戶端套接字(Client Socket)。
4.socket屬于網(wǎng)絡(luò)的那個(gè)層面??
Socket屬于傳輸層。
- Socket是應(yīng)用程序和網(wǎng)絡(luò)傳輸層之間的接口,它提供了一套編程接口,允許應(yīng)用程序通過傳輸協(xié)議(如TCP或UDP)進(jìn)行網(wǎng)絡(luò)通信。通過Socket,應(yīng)用程序可以創(chuàng)建連接、發(fā)送和接收數(shù)據(jù)。
- 具體來說,當(dāng)應(yīng)用程序使用TCP協(xié)議時(shí),它可以使用Socket接口來建立一個(gè)TCP連接,并通過Socket發(fā)送和接收可靠的字節(jié)流數(shù)據(jù)。當(dāng)應(yīng)用程序使用UDP協(xié)議時(shí),它可以使用Socket接口來發(fā)送和接收不可靠的數(shù)據(jù)報(bào)。
- 由于Socket直接與傳輸協(xié)議交互,并提供了對(duì)傳輸層功能的訪問,因此它被認(rèn)為屬于傳輸層。它將應(yīng)用程序和網(wǎng)絡(luò)層之間進(jìn)行了解耦,使得應(yīng)用程序可以方便地進(jìn)行網(wǎng)絡(luò)通信操作,無需關(guān)注底層的網(wǎng)絡(luò)細(xì)節(jié)。
5.Socket的常用類??
Socket的常用類包括以下幾個(gè):
- Socket:Socket類是Java中最基本的Socket類,用于客戶端與服務(wù)器之間的通信。它提供了一套方法,可以用于建立連接、發(fā)送和接收數(shù)據(jù)。
- ServerSocket:ServerSocket類用于在服務(wù)器端監(jiān)聽指定的端口,接受客戶端的連接請(qǐng)求。一旦有客戶端連接上來,ServerSocket會(huì)返回一個(gè)對(duì)應(yīng)的Socket實(shí)例,用于與該客戶端進(jìn)行通信。
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
BG雙9,目前在某外企。打算把之前校招時(shí)做的筆記通過專欄發(fā)出來,本專欄適合于C/C++、嵌入式方向就業(yè)的同學(xué),本篇面經(jīng)總結(jié)數(shù)千篇面經(jīng)的知識(shí)集合,實(shí)時(shí)更新全網(wǎng)最新的嵌入式/C++最新內(nèi)容,囊括了C語言、C++、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、嵌入式、算法與數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫等一系列知識(shí)點(diǎn),在我看來這些是求職者在面試中必須掌握的知識(shí)點(diǎn)。最后呢祝各位能找到自己合適的工作。