1.read和write
size=write(s,data,1024); //向对方的套接字写入data里的数据
size=read(s,data,1024); //从对方的套接字里读取数据到data里
2.recv()和send()--通常用于TCP套接字
头文件:
#include<sys/types.b>
#include<sys/socket.h>
ssize_t recv(int s,void*buf,size_t len,int flags) //接受数据放入缓冲区buf中,buf的长度为len,flags是接收数据的方式,通常选用MSG_DONTWAIT(即没有数据也立刻返回)
ssize_t send(int s,const void*buf,size_t len,int flags);//将buf中的数据按照flags方式发送到文件描述符为s的对方套接字中
当返回值小于len,说明缓冲区还有数据没有发送
当返回-1,说明发生错误
3.readv()和writev()
头文件:#include<sys/uio.h>
读:ssize_t readv(int s,const struct iovec* vector, int count);//可用于接受多个缓冲区数据
返回值:返回成功读到的字节数,当为-1发生错误
struct iovec
{
void *iov_base; //向量缓冲区的地址
size_t iov_len; //缓冲区大小,以字节为单位
}
int writev(int fd,const struct iovec*vector,int count); /向文件描述符为s的套接字写入vector里的数据,可同时向多个缓冲区写入数据。
成功返回发送的字节数,错误返回-1
4.recvmsg()和sendmsg()
头文件:#include<sys/types.h>
#include<sys/socket.h>
ssize_t recvmsg(int s,struct msghdr*msg,int flag);
返回值:返回成功读到的字节数,当为-1发生错误,当另一方使用正常方式关闭连接的时候返回值为0.
#include<sys/uio.h>
ssize_t sendmsg(int s,const struct msghdr*msg,int flags);