BSD Socket的收发数据函数介绍

本文介绍了在Linux环境中,利用BSD Socket进行数据收发的方法,将socket连接后的文件描述符应用于数据传输。

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

转载请注明出处:csdn火木达人

建立好了socket连接之后,我们就可以把得到的fd当作文件描述符来使用,一下三种方式可用于socket数据收发


1.connect() + write() + read() : 适用于TCP
头文件:
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
ssize_t write(int d,const void *buf,size_t nbytes);
调用成功返回成功写入的字节数,调用失败则返回-1。
参数1为对象的句柄;
参数2是写入的内容;
参数3是前者的大小。
ssize_t read(int d,void *buf,size_t nbytes);
正常调用返回成功读入的字节数,当读到句柄对象的底部时返回0,调用失败返回-1。
参数1为对象句柄;
参数2是读入容器的地址;
参数3是前者的大小。

2.sendto() + recvfrom() : 适用于TCP、UDP,多数用于UDP
头文件:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t sendto(int s,const void *msg,size_t len,int flags,const struct sockaddr *to,socklen_t tolen);
调用成功返回成功写入的字节数,调用失败则返回-1。
参数1是套接字句柄;
参数2是需要发送的数据;
参数3是前者的大小;
参数4是特殊传输标识,其值多为0;
参数5是发送目的地的sockaddr结构主机地址的指针值;
参数6是前者的长度。
ssize_t recvfrom(int s,void *buf,size_t len,int flags,struct sockaddr *from,socklen_t *fromlen);
正常调用返回成功读入的字节数,调用失败返回-1。
参数1是套接字句柄;
参数2是成功接收到远程传输过来后的数据时放入的变量地址;
参数3是前者的大小;
参数4是特殊传输标识,其值多为0;
参数5是接收到的数据的发送端的sockaddr结构主机地址的指针值;
参数6是前者长度的地址值。

3.connect() + send() + recv() : 适用于TCP、UDP,多数用于TCP
头文件:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int s, const void *msg, size_t len, int flags);
调用成功返回成功写入的字节数,调用失败则返回-1。
参数1是套接字句柄;
参数2是需要发送的数据;
参数3是前者的大小;
参数4是特殊传输标识,其值多为0。
ssize_t recv(int s, void *buf, size_t len, int flags);
正常调用返回成功读入的字节数,调用失败返回-1。
参数1是套接字句柄;
参数2是成功接收到远程传输过来后的数据时放入的变量地址;
参数3是前者的大小;
参数4是特殊传输标识,其值多为0。

send和recv的第四个参数也可以是以下的组合
MSG_DONTROUTE:不查找路由表
MSG_OOB:接受或发送带外数据
MSG_PEEK:查看数据,并不从系统缓冲区移走数据
MSG_WAITALL : 等待任何数据


MSG_DONTWAIT : 仅本操作非阻塞 
假如flags为0,则和read,write相同的操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值