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