C语言中send()函数和sendto()函数的使用方法
- 更新时间:2022-06-27 09:14:13
- 编辑:江弘博
参考资料
- 数据结构:C语言描述 课后答案 / 603 KB / 耿国华 推荐度:
- STM8 C语言精品编程100例 / 9.58 MB / 赵荣轩 推荐度:
- 数据结构与算法分析:C语言描述(第二版) 课后答案 / 14.9 MB / Mark Allen Weiss 陈越 推荐度:
正文内容
C的send函数和sendto函数
C语言send()函数:经socket传送数据
头文件:
#include <sys/types.h> #include <sys/socket.h>
定义函数:
int send(int s, const void * msg, int len, unsigned int falgs);
函数说明:send()用来将数据由指定的socket 传给对方主机. 参数s 为已建立好连接的socket. 参数msg 指向欲连线的数据内容, 参数len 则为数据长度. 参数flags 一般设0, 其他数值定义如下:
MSG_OOB 传送的数据以out-of-band 送出.
MSG_DONTROUTE 取消路由表查询
MSG_DONTWAIT 设置为不可阻断运作
MSG_NOSIGNAL 此动作不愿被SIGPIPE 信号中断.
返回值:成功则返回实际传送出去的字符数, 失败返回-1. 错误原因存于errno
错误代码:
EBADF 参数s 非合法的socket 处理代码.
EFAULT 参数中有一指针指向无法存取的内存空间
ENOTSOCK 参数s 为一文件描述词, 非socket.
EINTR 被信号所中断.
EAGAIN 此操作会令进程阻断, 但参数s 的socket 为不可阻断.
ENOBUFS 系统的缓冲内存不足
ENOMEM 核心内存不足
EINVAL 传给系统调用的参数不正确.
C语言sendto()函数:经socket传送数据
头文件:
#include <sys/types.h> #include <sys/socket.h>
定义函数:int sendto(int s, const void * msg, int len, unsigned int flags, const struct sockaddr * to, int tolen);
函数说明:sendto() 用来将数据由指定的socket 传给对方主机. 参数s 为已建好连线的socket, 如果利用UDP协议则不需经过连线操作. 参数msg 指向欲连线的数据内容, 参数flags 一般设0, 详细描述请参考send(). 参数to 用来指定欲传送的网络地址, 结构sockaddr 请参考bind(). 参数tolen 为sockaddr 的结果长度.
返回值:成功则返回实际传送出去的字符数, 失败返回-1, 错误原因存于errno 中.
错误代码:
1、EBADF 参数s 非法的socket 处理代码.
2、EFAULT 参数中有一指针指向无法存取的内存空间.
3、WNOTSOCK canshu s 为一文件描述词, 非socket.
4、EINTR 被信号所中断.
5、EAGAIN 此动作会令进程阻断, 但参数s 的soket 为补课阻断的.
6、ENOBUFS 系统的缓冲内存不足.
7、EINVAL 传给系统调用的参数不正确.
范例
#include <sys/types.h> #include <sys/socket.h> #include <netinet.in.h> #include <arpa.inet.h> #define PORT 2345 /*使用的port */ main() { int sockfd, len; struct sockaddr_in addr; char buffer[256]; //建立socket if(sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror ("socket"); exit(1); } //填写sockaddr_in 结构 bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr = hton1(INADDR_ANY); if(bind(sockfd, &addr, sizeof(addr)) < 0) { perror("connect"); exit(1); } while(1) { bezro(buffer, sizeof(buffer)); len = recvfrom(socket, buffer, sizeof(buffer), 0, &addr &addr_len); //显示client 端的网络地址 printf("receive from %s\n ", inet_ntoa(addr.sin_addr)); //将字串返回给client 端 sendto(sockfd, buffer, len, 0, &addr, addr_len); } }
C语言相关教程
-
c语言构建一个静态二叉树实现方法
下面小编就为大家带来一篇c语言_构建一个静态二叉树实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2022-04-04
-
VScode上配置 c语言环境的图文教程
这篇文章主要介绍了配置VScode c语言环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
发布时间:2022-04-16
-
C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解
这篇文章主要介绍了C语言中指针 int *p=0;和int *p;*p=0;和”&“有什么关系和区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
发布时间:2022-04-13
-
c语言和python之间有什么区别
为网友们分享了关于python的教程,c语言和python之间的主要区别是:Python是一种面向对象的解释型语言,通过缩进来表示语句体,在Python中每一条语句结尾后没有分号;C是一种面向过程的编译型语言,通过{}来表示语句体,C语言
发布时间:2022-06-22
-
利用C语言结构体实现通讯录
为网友们分享了关于C语言的教程,这篇文章主要为大家详细介绍了利用C语言结构体实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2022-06-15
-
C语言实现C++继承和多态的实例内容
本文主要给大家简单讲诉了C和C++的区别以及如何使用C语言模拟实现C++继承和多态,并附上示例代码,是篇相当不错的文章,推荐给喜欢C语言的小伙伴们
发布时间:2021-06-10
-
C语言实现自动给QQ好友发窗口抖动
这篇文章主要介绍了C语言实现自动给QQ好友发窗口抖动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2021-05-07
-
C语言链表实现销售管理系统
给网友朋友们带来一篇关于C语言的教程,这篇文章主要为大家详细介绍了C语言链表实现销售管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2022-06-26
-
C语言文件操作总结
本篇文章给大家通过代码示例讲述了C语言文件操作的相关知识点,对此有兴趣的朋友可以参考学习下。
发布时间:2022-04-06
-
C语言程序中对二叉树数据结构的各种遍历方式
这篇文章主要介绍了举例讲解C语言程序中对二叉树数据结构的各种遍历方式,先序中序后序二叉树遍历几乎成了最老生常谈的数据结构基础知识,的朋友可以参考下
发布时间:2021-05-22