socket()函数介绍

socket函数创建套接字:

SOCKET socket(int af, int type, int protocol); 

成功时返回套接字句柄,失败时返回INVALID_SOCKET。句柄其实就是标识符,唯一地标识某个东西。

第一个参数

套接字通信中的协议有一些分类。第一个参数传递套接字中使用的协议分类信息,此协议分类信息称为协议族。

下面列出几个协议族:

(1)PF_INET。IPv4互联网协议族。

(2)PF_INET6。IPv6互联网协议族。

(3)PF_LOCAL。本地通信的UNIX协议族。

(4)PF_PACKET。底层套接字的协议族。

(5)PF_IPX。IPX Novell协议族。

第二个参数

第二个参数是指套接字类型,即套接字的数据传输方式。两种具有代表性的套接字类型是SOCK_STREAM(面向连接的套接字,也叫做流套接字),SOCK_DGRAM(面向消息的套接字)。

(1)SOCK_STREAM(面向连接的套接字):

对于这种类型,可以看作是两端通过传送带传输数据。发送方将数据放在传送带上,通过传送带传递数据。只要传送带本身没有问题,就能保证数据不丢失。并且先放的数据先到达。

特点就是:①传输过程中数据不会丢失。②按序传输数据。③传输的数据不存在数据边界。

第三点的意思就是,发送方也许分5次发送数据,每次发送20字节,总共发送100字节。而接收方不一定必须进行5次接收,可以等100字节都到达时候,调用recv函数一次性接收。换句话说,第三点的意思就是send函数和recv函数的调用次数可以不同。

(2)SOCK_DGRAM(面向消息的套接字):

特点:①强调快速传输而非传输顺序。②传输的数据可能丢失或损毁。③传输的数据有数据边界(即send含糊和recv函数的调用次数必须相同)。④限制每次传输的数据大小。

第三个参数

该参数决定最终采用的协议。第一个参数只是指定了协议族,一个协议族中存在多个协议。而且同一个协议族中可能存在多个数据传输方式相同的协议,因此即使指定了前两个参数,还要通过第三个参数最终决定使用的协议。如果满足前两个参数条件的协议只有一个,则第三个参数可以为0。

如socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)和socket(PF_INET,SOCK_STREAM,0);是一样的,因为满足前两个参数条件的只有IPPROTO_TCP。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值