socket中的发送与接收函数
来源:互联网 发布:适合开发的linux系统 编辑:程序博客网 时间:2024/06/11 21:33
网络I/O操作:
(一)read()/write()
(二)recv()/send()
(三)readv()/writev()
(四)recvmsg()/sendmsg()
(五)recvfrom()/sendto()
---------------------------------------------
(1)推荐使用recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。
(2)各个函数声明如下:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
-------------------------------------------
(3)read()/write():
1)read函数:
read函数是负责从fd中读取内容.当读成功时,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。如果错误为EINTR说明读是由中断引起的,如果是ECONNREST表示网络连接出了问题。
2)wirte函数:
write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数。失败时返回-1,并设置errno变量。
两种返回结果:
1)write的返回值大于0,表示写了部分或者是全部的数据。
2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。
-----------------------------------------
(4)recv()/send():
1)send函数:
send 的参数含义如下:
sockfd :代表你与远程程序连接的套接字描述符。
msg :一个指针,指向你想发送的信息的地址。
len :是你想发送信息的长度。
flags :发送标记。一般都设为0(你可以查看send 的man pages 来获得其他的参数值并且明白各个参数所代表的含义)。
2)send返回值:
send()函数在调用后会返回它真正发送数据的长度,send()函数如果发生错误,则返回 –1。
注意:
send所发送的数据可能少于你给它的参数所指定的长度!因为如果你给send()的参数中包含的数据的长度远远大于send()所能一次发送的数据,则send()函数只发送它所能发送的最大数据长度,然后它相信你会把剩下的数据再次调用它来进行第二次发送。所以,记住如果send()函数的返回值小于len 的话,则你需要再次发送剩下的数据。幸运的是,如果包足够小(小于1K),那么send()一般都会一次发送光的。
3)recv函数:
sockfd :是你要读取数据的套接字描述符。
buf :是一个指针,指向你能存储数据的内存缓存区域。
len :是缓存区的最大尺寸。
flags :是recv() 函数的一个标志,一般都为0 (具体的其他数值和含义请参考recv()
4)recv返回值:
recv() 返回它所真正收到的数据的长度。(也就是存到buf 中数据的长度)。如果返回–1 则代表发生了错误(比如网络以外中断、对方关闭了套接字连接等),全局变量errno 里面存储了错误代码。
------------------------------------------
(5)readv()/writev()
(6)recvmsg()/sendmsg()
(7)recvfrom()/sendto()
(一)read()/write()
(二)recv()/send()
(三)readv()/writev()
(四)recvmsg()/sendmsg()
(五)recvfrom()/sendto()
---------------------------------------------
(1)推荐使用recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。
(2)各个函数声明如下:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
-------------------------------------------
(3)read()/write():
1)read函数:
read函数是负责从fd中读取内容.当读成功时,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。如果错误为EINTR说明读是由中断引起的,如果是ECONNREST表示网络连接出了问题。
2)wirte函数:
write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数。失败时返回-1,并设置errno变量。
两种返回结果:
1)write的返回值大于0,表示写了部分或者是全部的数据。
2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。
-----------------------------------------
(4)recv()/send():
1)send函数:
send 的参数含义如下:
sockfd :代表你与远程程序连接的套接字描述符。
msg :一个指针,指向你想发送的信息的地址。
len :是你想发送信息的长度。
flags :发送标记。一般都设为0(你可以查看send 的man pages 来获得其他的参数值并且明白各个参数所代表的含义)。
2)send返回值:
send()函数在调用后会返回它真正发送数据的长度,send()函数如果发生错误,则返回 –1。
注意:
send所发送的数据可能少于你给它的参数所指定的长度!因为如果你给send()的参数中包含的数据的长度远远大于send()所能一次发送的数据,则send()函数只发送它所能发送的最大数据长度,然后它相信你会把剩下的数据再次调用它来进行第二次发送。所以,记住如果send()函数的返回值小于len 的话,则你需要再次发送剩下的数据。幸运的是,如果包足够小(小于1K),那么send()一般都会一次发送光的。
3)recv函数:
sockfd :是你要读取数据的套接字描述符。
buf :是一个指针,指向你能存储数据的内存缓存区域。
len :是缓存区的最大尺寸。
flags :是recv() 函数的一个标志,一般都为0 (具体的其他数值和含义请参考recv()
4)recv返回值:
recv() 返回它所真正收到的数据的长度。(也就是存到buf 中数据的长度)。如果返回–1 则代表发生了错误(比如网络以外中断、对方关闭了套接字连接等),全局变量errno 里面存储了错误代码。
------------------------------------------
(5)readv()/writev()
(6)recvmsg()/sendmsg()
(7)recvfrom()/sendto()
0 0
- socket中的发送与接收函数
- socket中的发送与接收函数
- socket 发送与接收
- socket函数接收发送详解
- 设置SOCKET的发送与接收缓冲区
- socket 发送与接收结构体
- socket的发送与接收缓冲区
- 设置SOCKET的发送与接收缓冲区
- 设置SOCKET的发送与接收缓冲区 .
- tcp socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区 .
- c# Socket发送与接收方法
- tcp socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区
- TCP socket的发送与接收缓冲区
- socket 的发送与接收缓冲区解析
- socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区
- OpenGL4.x 学习笔记:安装&配置 - preparation
- python中的修饰器
- socket的定义与使用场景
- STL之pair类型详细分析
- I++,I--,++I,--I
- socket中的发送与接收函数
- iOS开发之自定义圆环式Slider
- 你如安好,便是晴天
- [Leetcode] Maximum Product Subarra
- FW300R路由器自动断线换IP
- 【无限互联】上下拉刷新瀑布流
- socket的基本函数
- IOS8地图的启动问题
- poj 3009 Curling 2.0 (dfs )