创建套接字socket函数的详解(sock_stream和sock_dgram的分析)
首先放上創建套接字的代碼,再具體講述函數中每一個參數的具體含義:
#include <sys/socket.h> int socket(int domain,int type,int protocol); ->成功時返回文件描述,失敗時返回-1(linux) #include <winsock2.h> SOCKET socket(int af,int type,int protocol); ->成功時返回socket句柄,失敗時返回INVALID_SOCKET/這里有三個參數(以linux下為例):
(1)、domain:套接字中使用的協議族(Protocol Family)信息;
(2)、type:套接字數據傳輸類型信息
(3)、protocol:計算機間通信中使用的協議信息
其中第一個協議族的信息主要有如下幾類,但是常用的是IPV4協議族(PF_INET)
PF_INET:IPv4協議族
PF_INET6:IPv6協議族
PF_LOCAL:本地通信的UNIX協議族
PF_PACKET:底層套接字的協議族
PF_IPX:IPX Novell協議族
第二個參數是套接字類型,具有代表性的又兩種:
(1)、面向連接的套接字(SOCK_STREAM)
這種類型的特點有:
a、傳輸過程中數據不丟失
b、按序傳輸數據(先發先達)
c、傳輸的數據不存在數據邊界
可以總結為:“可靠地、按序傳遞的、基于字節的面向連接的數據傳輸方式的套接字”
(2)、面向消息的套接字(SOCK_DGRAM)
這種類型的特點有:
a、強調快速傳輸而非傳輸順序
b、傳輸數據可能丟失也可能損壞
c、傳輸的數據有數據邊界
d、限制每次傳輸的數據大小
可以總結為:“不可靠的、不按順序的、以數據的高速傳輸為目的的套接字”
第三個參數主要是作為第一個,第二個參數無法指定類型的時的一種附加,但是通常來說我們常用的套接字不必要用到這一參數,賦值為0即可,這里不做過多贅述,只給出兩個例子來說明:
滿足IPv4協議,且是面向連接傳輸的只有:IPPROTO_TCP int socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); 滿足IPv4協議,且是面向消息傳輸的只有:IPPROTO_UDP int socket(PF_INET,SOCK_STREAM,IPPROTO_UDP);最后附上Windows下初始化Winsock的模板寫法:
SOCKET soc=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if(soc==INVALID_SOCKET)ErrorHandling("...");總結
以上是生活随笔為你收集整理的创建套接字socket函数的详解(sock_stream和sock_dgram的分析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SCAU软件开发基础C++复习
- 下一篇: 计算机出现蓝屏怎么解决,电脑开机出现蓝屏