亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Linux系統中的socket編程

發布時間:2022-01-25 11:51:17 來源:億速云 閱讀:159 作者:柒染 欄目:開發技術

這篇文章跟大家分析一下“如何分析Linux系統中的socket編程”。內容詳細易懂,對“如何分析Linux系統中的socket編程”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠對大家有所幫助。下面跟著小編一起深入學習“如何分析Linux系統中的socket編程”的知識吧。

socket簡介:

socket 是計算機網絡中用于在節點內發送或接收數據的內部端點。具體來說,它是網絡軟件 (協議棧) 中這個端點的一種表示,包含通信協議、目標地址、狀態等,是系統資源的一種形式。

它在網絡中所處的位置大致就是下面的黑色部分,應用層與傳輸層之間。

如何分析Linux系統中的socket編程如何分析Linux系統中的socket編程

其中的傳輸層就是 TCP/IP 所在的地方,而你平時通過代碼編寫的應用程序大多屬于應用層范疇,socket 在這里起到就是連接應用層與傳輸層的作用。

socket 的誕生是為了應用程序能夠更方便的將數據經由傳輸層來傳輸,所以它本質上就是對 TCP/IP 的運用進行了一層封裝,然后應用程序直接調用 socket API 即可進行通信。那么它是如何工作的呢?它分為 2 個部分,服務端需要建立 socket 來監聽指定的地址,然后等待客戶端來連接。而客戶端則需要建立 socket 并與服務端的 socket 地址進行連接。

server端的簡單示例:

經過前面的client端的學習,我們已經知道了如何創建socket,所以接下來就是去綁定他到具體的一個端口上去。

綁定socket到一個端口上去

bind()函數可以將socket綁定一個端口上,client可以通過這個端口發起請求,端口對應的socket便會與client端的socket連接。

 #include #include #include #include #Include
 
 int main()
 {
 int socket_desc;
 struct sockaddr_in server;
 
 socket_desc = socket(AF_INET,SOCK_STREAM,0);
 if(-1==socket_desc)
 {
 perror("socket create error\n");
 exit(1);
 }
 
 //監聽服務器自身
 
 server.sin_family=AF_INET;
 server.sin_port = htons(8888);
 server.sin_addr.s_addr = INADDR_ANY;
 
 //綁定到端口
 
 if(bind(socket_desc,(struct sockaddr* )&server,sizeof(server))對于socket綁定到一個明確的端口上,我們接下來要做的就是接受這個端口下面的所有數據。。通過上面的實現,我們可以看出一個端口只能被一個socket使用。監聽端口:在綁定完成socket與端口之后,我們還需要去監聽端口。為此,我們需要將socket設置在被監聽的狀態。listen()將被用來將socket設置為被監聽的模式下。listen( socket_desc, 3);listen(int sockfd,int backlog);可以將socket處于監聽的狀態下接收請求建立連接: #include #include #include #include
 
 int main()
 {
 int sock_desc,new_socket,sockaddr_size;
 struct sockaddr_in server,client;
 
 //創建socket
 sock_desc = socket(AF_INET,SOCK_STREAM,0);
 if(-1==sock_desc)
 {
 perror("cannot create socket\n");
 exit(1);
 }
 
 server.sin_family = AF_INET;
 server.sin_port = htons(8888);
 server.sin_addr.s_addr = INADDR_ANY;
 
 //綁定
 
 if(bind(sock_desc,(struct sockaddr*)&server,sizeof(server))運行上述代碼:輸出:waiting for incoming connecions.現在代碼已經正常跑起來了,并且等待請求連接。在另外一個終端內,我們發起一個請求:teltnet 127.0.0.1 8888在當前這個終端內將會輸出:trying 127.0.0.1connected to loaclhost。Escape character is ;;connection closed by foreign host同時在之前的終端中,server會輸出:waiting for incoming connecions.connection accepted便可以看到,server已經正確接收了client的連接請求并建立了連接,只是沒有了后續操作,主機緊接著關閉了這個鏈接。連接建立之后便可以順利地進行雙方的通信,這部分的send與recv操作完全一樣。另外, 服務端獲取客戶端的ip地址:由前面能夠知道accept()返回的是結構體sockaddr_in ,由此很容易得知client的ip和端口信息。** ** char * client_ip = inet_ntoa(client.sin_addr);``int` `client_port = ntohs(client.sin_port);以上就是良許教程網為各位朋友分享的Linux系統相關內容。想要了解更多Linux相關知識記得關注公眾號“良許Linux”,或掃描下方二維碼進行關注,更多干貨等著你!

關于如何分析Linux系統中的socket編程就分享到這里啦,希望上述內容能夠讓大家有所提升。如果想要學習更多知識,請大家多多留意小編的更新。謝謝大家關注一下億速云網站!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新闻| 赞皇县| 天长市| 南华县| 平昌县| 息烽县| 武义县| 昌乐县| 高青县| 勃利县| 通江县| 灌云县| 霸州市| 龙里县| 北辰区| 铜鼓县| 永德县| 永济市| 泰和县| 遂平县| 略阳县| 富裕县| 建瓯市| 靖西县| 江油市| 三亚市| 区。| 刚察县| 闽侯县| 天台县| 土默特右旗| 清徐县| 张家川| 和政县| 临桂县| 东平县| 抚远县| 临沧市| 本溪市| 镇远县| 嘉兴市|