socket c语言 AF_TIPC,socket编程 send() recv() sendto() recvfrom()

本文详细介绍了C语言中socket编程的AF_TIPC协议簇,以及send、recv、sendto和recvfrom函数的使用,包括参数解释和操作流程。通过示例展示了如何在TCP和UDP协议中应用这些函数,特别是无连接的数据报socket如何利用sendto和recvfrom进行数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

socket编程 send() recv() sendto() recvfrom()

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

af:

指定一个协议簇(协议域),常见有AF_INET──指定为IPv4协议,AF_INET6──指定为IPv6,AF_LOCAL──指定为UNIX 协议域等。

它值都是系统预先定义的宏,系统支持哪些协议我们才可以使用,否则会调用失败。协议簇是网络层的协议

type:

指定socket类型,常用的socket类型有:TCP(SOCK_STREAM)、UDP(SOCK_DGRAM)、SOCK_SEQPACKET、SOCK_RAW等,分别表明字节流、数据报、有序分组、原始套接口。

这实际上是指定内核为我们提供的服务抽象(需要注意的,并不是每一种协议簇都支持这里的所有的类型,所以类型与协议簇要匹配)。

protocol:

指定相应的传输协议,也就是诸如TCP或UDP协议等等,系统针对每一个协议簇与类型提供了一个默认的协议(protocol设置为0使用默认协议)。常用的协议有:

IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。

SOCK_STREAM 类型:

提供有序的、可靠的、双向的和基于连接的字节流,使用带外数据传送机制,为Internet地址族使用TCP。

SOCK_STREAM类型的套接口为全双向的字节流。对于流类套接口,在接收或发送数据前必需处于已连接状态。

用connect()调用建立与另一套接口的连接,连接成功后,即可用send()和recv()传送数据。

当会话结束后,调用closesocket()。带外数据根据规定用send()和recv()来接收。

实现SOCK_STREAM类型套接口的通讯协议保证数据不会丢失也不会重复。如果终端协议有缓冲区空间,且数据不能在一定时间成功发送,则认为连接中断,其后续的调用也将以WSAETIMEOUT错误返回。

SOCK_DGRAM 类型:

支持无连接的、不可靠的和使用固定大小(通常很小)缓冲区的数据报服务,为Internet地址族使用UDP。

SOCK_DGRAM类型套接口允许使用sendto()和recvfrom()从任意端口发送或接收数据报。如果这样一个套接口用connect()与一个指定端口连接,则可用send()和recv()与该端口进行数据报的发送与接收

一般情况:

send(),recv()用于TCP,

sendto()及recvfrom()用于UDP

,但是send(),recv()也可以用于UDP,sendto()及recvfrom()也可以用于TCP

1、

int send(SOCKET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值