TCP、UDP套接字的数据传输
2018-06-18 04:08:04来源:未知 阅读 ()
tcp发送数据:
1 #include <sys/types.h> 2 #include <socket.h> 3 ssize_t send(int sockfd,const void *msg,size_t len,int flags);
函数send只能对面向连接的套接字使用。参数sockfd为已经建立好连接的套接字描述符。参数msg指向待发送数据的缓冲区,参数len为代发数据的长度。参数flags为控制选项:
-
MSG_OOB:在指定的套接字上发送带外数据(out-of-band data),该类型的套接字必须支持带外数据(如SOCK_STREAM)。
-
MSG_DONTROUTE:通过最直接的路径发送数据,而忽略下层协议的路由设置。
PS:函数执行成功只是说明数据写入套接字的缓冲区中,并不表示数据已经成功地通过网络发送到目的地。
tcp接收数据:
#include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd,void *buf,size_t len,int flags);
函数从sockfd接受数据并保存到参数buf中,参数len为缓冲区的长度。(只能是面向连接的套接字)参数flags为控制选项:
-
MSG_OOB:请求接受带外数据。
-
MSG_PEEK:只查看数据而不读出。
-
MSG_WAITALL:只在接受缓冲区满时才返回。
如果一个数据报太长以至于无法完全放下时,剩余部分将可能丢弃。如果在指定的套接字上无数据到达时,recv函数将阻塞。成功返回收到的字节数,出错-1,错误代码errno。
UDP发送数据:
#include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd,const void *msg,size_t len,int flags, const struct sockaddr *to,socklen_t tolen);
函数sendto的功能和send类似,但函数sendto不需要套接字一定是面向连接的,所以该函数主要用来发送UDP数据。参数to指定目的地地址。
UDP接收数据:
#include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags, struct sockaddr *from,socklen_t *fromlen);
函数recvfrom与函数recv类似,但recvfrom不要求套接字一定是面向连接的。如果参数from非空,且该套接字不是面向连接的,则函数返回时,参数from中将保存数据的源地址。
关闭套接字:
#include <unistd.h> int close(int fd);
#include <sys/socket.h> int shutdown(int s,int how);
参数how的取值:
-
SHUT_RD:将连接的读通道关闭,接收缓冲区中的未读取数据将丢弃,仍可以发送数据。
-
SHUT_WR:将连接的写通道关闭,发送缓冲区中的为发送的数据丢弃,仍可以接收数据。
-
SHUT_REWR:读写通道都关闭。
-
成功0,出错-1,errno。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:选择排序_C语言_数组
- 一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent 2020-06-05
- Qt做Tcp数据传输 2020-05-26
- TCP三次握手与四次挥手 2019-12-24
- 分享一个Linux C++消息通信框架TCPSHM 2019-11-25
- 套接字 2019-11-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash