一、介紹
![wKgZomX2ka2AJV7kAAP5n4qgJjM308.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2ka2AJV7kAAP5n4qgJjM308.png)
![wKgZomX2lV-Aca30AB1GmzLAIgU761.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2lV-Aca30AB1GmzLAIgU761.png)
socket套接字:分為TCP和UDP
TCP:面向連接,可靠,(類似于雙方打電話),適用于數據量小而且需要準確傳輸
UDP:面向報文,不可靠,(類似于雙方發短信),適用于數據量大且不需要準確傳輸
![wKgZomX2lSCAO43UACggk-g7ydc046.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2lSCAO43UACggk-g7ydc046.png)
![wKgaomX2lNuAC-IZAAGPQ1ZXiz8556.png](https://file1.elecfans.com/web2/M00/C5/95/wKgaomX2lNuAC-IZAAGPQ1ZXiz8556.png)
進程間通信是基于Linux內核的,不適用于兩臺手機之間的通信。
字節序:
小端:將低序字節存儲在起始地址
大端:將高序字節存儲在起始地址
![wKgaomX2mS2AaGfdAAIYGvahd34588.png](https://file1.elecfans.com/web2/M00/C5/95/wKgaomX2mS2AaGfdAAIYGvahd34588.png)
![wKgZomX5LR2AYk6BABfbQuMah5Y754.png](https://file1.elecfans.com/web2/M00/C4/F7/wKgZomX5LR2AYk6BABfbQuMah5Y754.png)
二、socket服務器與客戶端
客戶端獲取服務器的端口號和IP地址:
![wKgZomX2mwCALJ_uABsiaxSPn-A629.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2mwCALJ_uABsiaxSPn-A629.png)
![wKgZomX2nYWAANmtAAuu6DEn-_g558.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2nYWAANmtAAuu6DEn-_g558.png)
socket的具體工作流程:
![wKgaomX2ob6AXEcHABVDTM7L_v4425.png](https://file1.elecfans.com/web2/M00/C5/95/wKgaomX2ob6AXEcHABVDTM7L_v4425.png)
![wKgZomX2o0-AQHU-ABF1UgWIrms045.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2o0-AQHU-ABF1UgWIrms045.png)
![wKgaomX2ph6AFJBRABGqHrVQv6Q325.png](https://file1.elecfans.com/web2/M00/C5/95/wKgaomX2ph6AFJBRABGqHrVQv6Q325.png)
![wKgZomX2pj2AEOrMAAsnFEGdHCA631.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2pj2AEOrMAAsnFEGdHCA631.png)
![wKgZomX2poSAY8jiAAmkSxA8o1Q530.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2poSAY8jiAAmkSxA8o1Q530.png)
![wKgaomX2ppKAHitAAA6wuYoS81o699.png](https://file1.elecfans.com/web2/M00/C5/95/wKgaomX2ppKAHitAAA6wuYoS81o699.png)
![wKgZomX2psGAQ0AtAAm9i9Mt34o494.png](https://file1.elecfans.com/web2/M00/C4/AC/wKgZomX2psGAQ0AtAAm9i9Mt34o494.png)
![wKgaomX4PfSAekTwAAXj3X_zQmg956.png](https://file1.elecfans.com/web2/M00/C5/C6/wKgaomX4PfSAekTwAAXj3X_zQmg956.png)
![wKgZomX4PamAKZmxAAO4irgffDg660.png](https://file1.elecfans.com/web2/M00/C4/DE/wKgZomX4PamAKZmxAAO4irgffDg660.png)
![wKgaomX4PtKAQxDvAAv-m_hmCPs796.png](https://file1.elecfans.com/web2/M00/C5/C6/wKgaomX4PtKAQxDvAAv-m_hmCPs796.png)
atoi()函數
atoi():int atoi(const char *str );
功能:把字符串轉換成整型數。
![wKgZomX5RNOAC54lAA0cWwlB9w0119.png](https://file1.elecfans.com/web2/M00/C4/FE/wKgZomX5RNOAC54lAA0cWwlB9w0119.png)
實現例程:
一、linux下客戶端連接服務器,成功后,主機(客戶端)telnet遠程登錄虛擬機(服務器):
①:
![wKgaomX5VOSAJoz-AAH0rT9JuIw135.png](https://file1.elecfans.com/web2/M00/C5/EB/wKgaomX5VOSAJoz-AAH0rT9JuIw135.png)
創建套接字,確定好連接協議(IPV4),type種類選擇為流式套接字,基于TCP協議。
②:
![wKgZomX5Vd6ANdtmAAMxS9TxCzo014.png](https://file1.elecfans.com/web2/M00/C5/02/wKgZomX5Vd6ANdtmAAMxS9TxCzo014.png)
確定好服務器的IP地址以及端口號
其中htons是將端口號轉換成網絡能識別的格式;inet_aton是將IP地址轉化成網絡識別的IP地址。
③:
![wKgaomX5WRCAfID3AACcrqExgC8998.png](https://file1.elecfans.com/web2/M00/C5/EC/wKgaomX5WRCAfID3AACcrqExgC8998.png)
監聽是否有客戶端連接。
④:
![wKgaomX5WTiAMQBOAADJOcEmtVo435.png](https://file1.elecfans.com/web2/M00/C5/EC/wKgaomX5WTiAMQBOAADJOcEmtVo435.png)
允許客戶端的接入。
最后while(1);等待客戶端的接入。
二、獲取客戶端的IP地址:
![wKgZomX8MdGADVK6AAXOTfO0wLU169.png](https://file1.elecfans.com/web2/M00/C5/57/wKgZomX8MdGADVK6AAXOTfO0wLU169.png)
在上一個工程代碼的結構上,增加accept具體監聽對象,以及讀取IP地址。
三、客戶端與服務器數據傳輸的實現:
客戶端先寫入再讀取:
![wKgZomX8NpmALCdSAALsUeEW4dk726.png](https://file1.elecfans.com/web2/M00/C5/57/wKgZomX8NpmALCdSAALsUeEW4dk726.png)
服務器端先讀取再寫入:
![wKgZomX8NtGAY-XsAANs38KMT2Q661.png](https://file1.elecfans.com/web2/M00/C5/57/wKgZomX8NtGAY-XsAANs38KMT2Q661.png)
最后運行服務器與客戶端的代碼會得到:
![wKgaomX8NvyARUM6ABKQRjBOZHc784.png](https://file1.elecfans.com/web2/M00/C6/41/wKgaomX8NvyARUM6ABKQRjBOZHc784.png)
四、端口經常被占用,做成main函數傳參配置文件
![wKgZomX-b5OAVZ_lAAmL7XPcUxg555.png](https://file1.elecfans.com/web2/M00/C5/87/wKgZomX-b5OAVZ_lAAmL7XPcUxg555.png)
在上述例子中編寫傳參參數:
c_addr.sin_port=htons(atoi(argv[2]));
inet_aton(argv[1],&c_addr.sin_addr);
其中atoi(argv[2])是將字符串轉換為整型數據。
運行結果:
![wKgaomX-cxaABXqkAA1fmBkn7WE112.png](https://file1.elecfans.com/web2/M00/C6/71/wKgaomX-cxaABXqkAA1fmBkn7WE112.png)
五、
在上述客戶端與服務器之間的聊天
審核編輯 黃宇
-
Linux
+關注
關注
87文章
11345瀏覽量
210409 -
服務器
+關注
關注
12文章
9308瀏覽量
86071 -
網絡編程
+關注
關注
0文章
72瀏覽量
10104
發布評論請先 登錄
相關推薦
百問FB網絡編程 - 網絡編程簡介
Python編程:處理網絡請求的代理技術
Linux網絡基礎知識總結
![<b class='flag-5'>Linux</b><b class='flag-5'>網絡</b>基礎知識總結](https://file1.elecfans.com/web1/M00/F3/CA/wKgZoWce-weAdfoUAAA-loCMbGU545.png)
Linux開發怎么學?
Linux網絡協議棧的實現
![<b class='flag-5'>Linux</b><b class='flag-5'>網絡</b>協議棧的實現](https://file1.elecfans.com/web2/M00/06/C6/wKgaombfpT-AeVQcAACjr17dpiQ190.png)
linux開發板與樹莓派的區別
Linux 驅動開發與應用開發,你知道多少?
![<b class='flag-5'>Linux</b> 驅動開發與應用開發,你知道多少?](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
評論