函数描述
  • #include <sys/socket.h>
  • ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 函数功能:向对方发送数据
    其实也可以使用sendto函数:
    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);,如果sendto后面的两个参数为NULL0时与send函数的作用是等价得。
    sendto函数一般用作UDP通信
  • 返回值:
    成功:返回发送的字节数
    失败:返回-1 且errno被设置
  • 函数参数
    a. sockfd 用于通信的文件描述符
    服务器:sockfd为accept返回的通信描述符
    b. buf 应用缓存,用于存放要发送到数据
    可以是任何类型:结构体,int , char,float,字符串
    c. len buf的大小
    d. flags 一般设置为0,此时send为阻塞式发送
    即发送不成功会一直阻塞,直到被某个信号终端终止,或者直到发送成功为止。
    指定MSG_NOSIGNAL,表示当连接被关闭时不会产生SIGPIPE信号
    指定MSG_DONTWAIT 表示非阻塞发送
代码实例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>typedef struct data {char name[30];unsigned int num;
}Data;
void print_err(char *str, int line, int err_no) {printf("%d, %s :%s\n",line,str,strerror(err_no));_exit(-1);
}int main()
{int skfd = -1, ret = -1;skfd = socket(AF_INET, SOCK_STREAM, 0);if ( -1 == skfd) {print_err("socket failed",__LINE__,errno);}struct sockaddr_in addr;addr.sin_family = AF_INET; //设置tcp协议族addr.sin_port = 6789; //设置端口号addr.sin_addr.s_addr = inet_addr("192.168.102.169"); //设置ip地址ret = bind(skfd, (struct sockaddr*)&addr, sizeof(addr));if ( -1 == ret) {print_err("bind failed",__LINE__,errno);}/*将套接字文件描述符从主动转为被动文件描述符,然后用于被动监听客户端的连接*/ret = listen(skfd, 3);if ( -1 == ret ) {print_err("listen failed", __LINE__, errno);}/*被动监听客户端发起的tcp连接请求,三次握手后连接建立成功*/int cfd = -1;struct sockaddr_in caddr = {0};//为应用层获取客户端的IP和端口号int csize = 0;cfd = accept(skfd, (struct sockaddr*)&caddr, &csize);if (-1 == cfd) {print_err("accept failed", __LINE__, errno);}printf("cport = %d, caddr = %s\n", ntohs(caddr.sin_port),inet_ntoa(caddr.sin_addr));//发送数据结构体定义Data std_data = {0};while (1) {printf("stu name:\n");scanf("%s",std_data.name);//对于int型的需要将主机端序转换为网络端序,这里转成long型。printf("stu num:\n");scanf("%d",&std_data.num);std_data.num = htonl(std_data.num);//将数据std_data强制类型转换后发送ret = send(cfd, (void *)&std_data,sizeof(std_data),0);if ( -1 == ret) {print_err("accept failed", __LINE__, errno);}    }return 0;
}

C语言网络编程:send函数详解相关推荐

  1. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  2. gets和fgets函数及其区别,C语言gets和fgets函数详解

    gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的"互联网蠕虫",它在 UNIX 操作系统的 ...

  3. puts和fputs函数及其区别,C语言puts和fputs函数详解

    puts和fputs函数及其区别,C语言puts和fputs函数详解 与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数.如下面的示例代码所示: int ...

  4. Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 识别数据文件信息

    识别数据文件信息主要是指对mp3数据格式识别 定义顺序代码如下 typedef struct mp3_struct //自定义mp3结构体 {char heade[3]; //tag字符标记char ...

  5. C语言strcpy、strcnpy函数详解

    C语言strcpy.strcnpy函数详解 一.strcpy函数 1.函数原型 2.参数.返回值解析 3.注意事项 4.strcpy函数模拟实现 二.strncpy函数 1.函数原型 2.与strcp ...

  6. java的匿名函数_JAVA语言中的匿名函数详解

    本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...

  7. C语言strcat、strncat函数详解

    C语言strcat.strncat函数详解 一.strcat函数 1.函数原型 2.函数参数.返回值解析 3.函数作用 4.注意事项 5.strcat函数模拟实现 二.strncat函数 1.函数原型 ...

  8. Java网络编程和NIO详解开篇:Java网络编程基础

    老曹眼中的网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的 ...

  9. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

最新文章

  1. 数据库中INFORMATION_SCHEMA的说明及使用
  2. GC悲观策略之Parallel GC篇
  3. cshrc设置 ic618_.cshrc一般在什么地方
  4. 最挑战程序员的9大任务,你都干过哪些?
  5. Linux内核驱动之GPIO子系统(一)GPIO的使用
  6. 云网一体,“湘遇湘融 | 移动云TeaTalk·长沙站 启动倒计时
  7. 常用控件 winform
  8. Java 编程下的并发线程之间的同步代码块死锁
  9. 我的渣渣java实训
  10. Nexpose漏扫使用步骤
  11. python闭包有什么作用_闭包在实际开发中有什么用?
  12. LD_PRELOAD实现API劫持
  13. 【IDEA系列】利用 IntelliJ IDEA 进行代码对比的方法
  14. 使用itext到处PDF,使用PDF模板导出PDF文件
  15. 艾永亮:B站破壁出圈,同是弹幕视频网站,为什么倒下的是A站?
  16. Java learn lambda的方法引用
  17. SQLyog连接MySQL时出现2058错误解决方法
  18. starUML使用教程
  19. 一本通 P1486 【黑暗城堡】
  20. 我的世界服务器清道夫配置文件,清道夫环保网分享:废液焚烧炉烟气处理标准配置...

热门文章

  1. provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified
  2. python中的特殊用法
  3. 爱普生WF7710WF7720WF3720升级固件导致墨盒不识别解决方法
  4. 估值11亿美元新独角兽诞生,网易有道CEO周枫:宁愿十年挖一口井
  5. html5 流星,HTML5流星和恒星
  6. Ubuntu通过deepin-wine安装QQ(2022.7.20可用)
  7. 使用Bcrypt进行密码加密
  8. 卡尔曼滤波(Kalman filter)算法以及Arduino应用-mpu6050(导航贴)
  9. PNP型三极管与NPN型三极管区别
  10. Sequence Model-week1编程题3-用LSTM网络生成爵士乐