日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux网络编程之Socket编程

發布時間:2023/11/30 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux网络编程之Socket编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)socket套接字

? ? ? ? ? ? ?1)在linux環境下,socket用于表示進程間網絡通信的特殊文件類型,其本質是內核借助緩沖區形成的偽文件(不占磁盤空間,除此之外還有二進制文件,管道,字符文件)。

? ? ? ? ? ? ?2)偽文件也可以像文件一樣的操作(讀寫),區別在于管道用于本地進程間的通信套接字多用于網絡進程間數據的傳遞。?

? ? ? ? ? ? ?3)在TCP/IP協議中,IP地址可以在網絡環境中唯一標識一個主機,端口號則在主機中唯一標識一個進程。因此在網絡中,IP地址+端口號就對應一個socket

? ? ? ? ? ? ?4)在網絡通信中,套接字一定成對存在。一段的發送緩沖區對應對端的接收緩沖區,使用同一個文件描述符可以操作發送緩沖區和接收緩存區。(全雙工,文件描述符一個,數據緩存區兩個

(2)網絡字節序

? ? ? ? ? ? ? 1)大端字節序:低地址高位、高地址低位

? ? ? ? ? ? ? ? ? ? 小端字節序:低地址低位,高地址高位(windows)

? ? ? ? ? ? ?2)網絡數據流地址規定:先發出的數據是低地址,后發出的數據是高地址。

? ? ? ? ? ? ? ? ? ?TCP/IP協議規定,網絡數據流采用大端字節序,即低地址高字節。

? ? ? ? ? ? ?3)為了保證網絡程序具有可移植性,需要調用庫函數做網絡字節序和主機字節序的轉換。?

? ? ? ? ? ? ? ? ? ? ? ? ? ? #include<arpa/inet.h>

? ? ? ? ? ? ? ? ? ? ? ? ? ?uint32_t? ?htonl(uint32_t? ?hostlong);? //host to net long? ?IP

? ? ? ? ? ? ? ? ? ? ? ? ? ?uint16_t? ?htons(uint16_t? ?hostshort);? //host to net short port?

? ? ? ? ? ? ? ? ? ? ? ? ? ?uint32_t? ?ntohl(uint32_t? ?netlong); //net? to host? long? IP?

? ? ? ? ? ? ? ? ? ? ? ? ? ?uint16_t? ?ntohl(uint16_t? ?netshort);? //net? to host? short port??

? ? ? ? ? ? ?如果主機是小端字節序,這些函數將參數做相應的大小端轉換后返回。如果主機是大端字節序,則不做轉換。

(3)IP地址轉換

? ? ? ? ? ? 1)通常我們所說的IP地址(如192.168.1.200),屬于點分十進制形式,而我們在網絡傳輸中通常使用到的是網絡字節序形式,因此在傳輸的過程中,首先需要把點分十進制形式的字符串轉換為網絡字節序格式。

? ? ? ? ? ? 2)IP地址轉換函數

? ? ? ? ? ? ? ? ? ? ? #include<arpa/inet.h>

? ? ? ? ? ? ? ? int? ? inet_pton(int af? ,const char *src, void *dst);//點分十進制字符串轉換為網路字節序

? ? ? ? ? ? ? ?const? char *inet_ntop(int af, const void *src, char *dst, socklen_t size);//網絡字節序轉換為點分十進制

? ? ? ? ? ? ? ? 參數:af(IP地址格式):AF_INET(IPV4)? ? ? ? ? ? AF_INET6(IPV6)

? ? ? ? ? 3)sockaddr數據結構

? ? ? ? ? ? struct sockaddr誕生于IPV4協議時代,函數的接口通常使用(struct sockaddr),但是現在為了兼容IPV6,將struct sockaddr 改變成了struct sockaddr_t格式(因此現在定義變量時使用struct sockaddr_t,在傳參數時使用struct sockaddr(不能直接用這個定義變量)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

struct? sockaddr{? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? struct sockaddr_in{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct in_addr{

? ? ? ? ? sa_family_t? ? sa_family;? ? ? ? ? ??_kernel_sa_family_t? ? ?sin_family;? //地址結構類型? ? ? ? ? ? ? _be32 s_addr;IP地址

? ? ? ? ? char? sa_data[14];? ? ? ? ? ? ? ? ? ? ?_be16? ? ? ? ? ? ?sin_port;? ?//端口號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? };

};? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct? in_addr? sin_addr;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?......

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? };

?(4)Socket模型創建流程圖

? ? ? ? ? ? ? ? ?注:TCP客戶端沒有調用bind()函數綁定IP和端口號,系統會自動給它分配IP和端口號,但在TCP服務端則不能省去bind()函數。

? ? ? ? ?

(5)網絡套接字函數

? ? ? ? ? ? ? ? ? ?頭文件:#include<sys/types.h>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#include<sys/socket.h>

? ? ? ? ? ? 1)打開一個網絡通訊端口:socket函數(服務端、客戶端)

? ? ? ? ? ? ? ? ? ? ? int? ?socket(int domain, int type ,int protocol);

? ? ? ? ? ? ? ? ? ? ?參數:domain:協議類型,AF_INET(IPV4)? ?AF_INET6(IPV6)? ? ?AF_UNIX(本地協議)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?type:SOCK_STREAM(流失協議,默認為TCP傳輸)? ? ? ?SOCK_DGRAM(報式協議,默認使用UDP傳輸)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?protocol:使用默認協議

? ? ? ? ? ? ? ? ? ? 返回值:成功返回新創建socket的文件描述符,失敗返回-1.

? ? ? ? ?2)綁定IP和端口號:bind函數(服務端/客戶端)

? ? ? ? ? ? ? ? ? ? ? ?int? ?bind(int sockfd ,? const struct sockaddr *addr, socklen_t? addrlen);

? ? ? ? ? ? ? ?參數:sockfd : socket 文件描述符

? ? ? ? ? ? ? ? ? ? ? ? ? ?addr:綁定了IP和端口號的結構體

? ? ? ? ? ? ? ? ? ? ? ? ? addrlen:sizeof(addr)長度

? ? ? ? ? ? ? 返回值:成功返回0,失敗返回-1.

? ? ? ? 3)指定監聽上限數(同一時間允許多少客戶端和服務器連接):listen函數(服務端)

? ? ? ? ? ? ? int? ?listen(int? ?sockfd,? int? backlog)

? ? ? ? ? ? ? ? ? ?參數:backlog:排隊進行三次握手隊列和剛剛建立三次握手隊列的鏈接數和。

? ? ? ? ? ? ? ? ? ?返回值:成功返回0,失敗返回-1

? ? ? 4)接收連接請求:accept函數(服務端調用)

? ? ? ? ? ? int accept(int? sockfd,struct? sockaddr *addr,socklen_t *addrlen);

? ? ? ? ? ? ? ? ? 參數:addr(傳出參數)返回鏈接客戶端地址信息,含IP和端口號。

? ? ? 5)連接客戶端:connect函數(客戶端調用)

? ? ? ? ? ? int? ?connect(int? sockfd,const struct *sockaddr,socklen_t addrlen)

? ? ? ? ? ? ? ? ?參數:addr:傳入參數,指定服務器的地址信息,含IP地址和端口號。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?addrlen:sizeof(addr)大小

? ? ? ? ? ? ? ? 返回值:成功返回0,失敗返回-1.

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? addrlen(傳入傳出參數):傳入sizeof(addr)大小,函數返回真正接收到的地址結構體的大小。

? ? ? ? ? ? ? ? 返回值:生成一個新的socket文件描述符,用于和客戶端通信,失敗返回-1

(6) C/S模型之TCP:實現最簡單的客戶端、服務器程序

? ? ? ? ? ? ?服務器端:可通過命令nc? +自己ip +端口號完成自我通信(在不同進程使用)nc 182.168.1.100 6666

? ? ? ? ? ? ? ?

? ? ? ? ? ? 客戶端:

? ? ? ? ??

總結

以上是生活随笔為你收集整理的linux网络编程之Socket编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 露脸啪啪清纯大学生美女 | 日韩一区二区毛片 | av成人动漫| 不卡一区二区三区四区 | 色乱码一区二区三在线看 | 国产干b | 人妻熟女一区二区三区 | 小视频在线播放 | 果冻传媒18禁免费视频 | 日韩啪啪网站 | 福利视频不卡 | 免费黄色a级片 | 九九热精品免费视频 | 激情成人综合网 | 欧美激情性做爰免费视频 | 色综合久久久无码中文字幕波多 | 乌克兰av在线| 亚洲日本片 | 日韩视频在线播放 | 欧美日日骚| 720url在线观看免费版 | 国产又粗又猛又黄又爽的视频 | 噼里啪啦免费高清看 | 国产欧美亚洲精品 | 91视频 - 8mav| 天天夜夜啦啦啦 | www.在线观看麻豆 | 韩国一级一片高清免费观看 | 天天天天操 | 色婷婷婷| 男女扒开双腿猛进入爽爽免费 | 国产精品国产一区 | 亚洲专区一区二区三区 | 韩日少妇 | 九九热免费视频 | 影音先锋中文字幕人妻 | 在线视频一区二区 | 欧美寡妇性猛交 | 国产aⅴ精品一区二区三区久久 | 成人免费在线播放视频 | 日本一区视频在线播放 | 一区二区免费在线观看视频 | 亚洲码欧美码一区二区三区 | 人人妻人人澡人人爽精品 | 国产精品色视频 | 午夜影院男女 | 国产精品免费久久久 | 亚洲自拍偷拍综合 | 二三区视频 | 精品人妻少妇一区二区三区 | 欧美黑人又粗又大又爽免费 | 涩涩视频网 | 久久91av| 日韩视频在线一区 | 国产在线观看a | 午夜av影视 | 亚洲一区二区动漫 | 精品日韩av| 国产成人精品综合在线观看 | 精品韩国一区二区三区 | 国产精品色 | 久久免费的精品国产v∧ | 麻豆啪啪 | 曰本黄色大片 | 在线看三级| 国产91久久精品一区二区 | 可乐操亚洲 | 四虎一国产精品一区二区影院 | 亚洲中文字幕第一区 | 深夜福利久久 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | www黄色网| 国内精品91 | 国产精品亚洲五月天丁香 | 综合成人在线 | 中文字幕高潮 | 善良的公与媳hd中文字 | 三年在线观看视频 | 北条麻妃一区二区三区免费 | 日本成人中文字幕 | 看a网站| 中文精品久久久久人妻不卡 | 免费高清黄色 | 日本一区二区在线播放 | 丁香五香天堂 | 伊人网狼人 | 一级片毛片 | 日本a级c片免费看三区 | 美女二区| 久久精品牌麻豆国产大山 | 日韩国产成人无码av毛片 | 精品无码久久久久久久久 | 色屁屁一区二区三区 | 亚洲福利一区二区 | av天堂一区二区三区 | 男性裸体全身精光gay | √资源天堂中文在线视频 | 性综合网| 欧美激情免费在线 |