一、作用

向目标发送数据,本质上就是将数据复制粘贴进系统的协议发送缓冲区,计算机伺机发送出去

二、句法

int WSAAPI send(SOCKET     s,const char *buf,int        len,int        flags
);

s
标识已连接套接字的描述符。

buf
指向包含要传输的数据的缓冲区的指针。

len
buf参数指向的缓冲区中数据的长度(以字节为单位)。

flags
一组标志,指定进行呼叫的方式。通过将按位或运算符与以下任何值一起使用来构造此参数。

  • MSG_DONTROUTE:指定不应对数据进行路由。Windows套接字服务提供者可以选择忽略此标志。
  • MSG_OOB:发送OOB数据(仅SOCK_STREAM之类的流式套接字。
示例
send(socketClient, "abcd", sizeof("abcd"), 0)

三、参数

参数1

目标的socket,每个客户端对应唯一的socket

参数2

给对方发送的字节串
这个一般不超过1500个字节,也是网络传输的最大单元,也就是客户端发过来的数据,是协议规定的,这个数据也是根据很多情况总结出来的最优值
1500的相关知识文末进一步说明

参数3

要发送的字节个数,决定发送的个数,如果比参数2中的要发送的字节数短,则只发送参数3决定的个数,后面的就不管了,大了就发送过多的字节,内存可能泄漏
一般与参数2一样大小

参数4

一般直接写0就行

其他:

  1. MSG_OOB:传输一段数据,再外带一个额外的特殊数据,但不建议使用,一般忽略就行
  2. MSG_DONTROUTE :指定数据不应受路由限制,windows套接字服务提供。程序可以选择忽略

四、返回值

  • 成功返回写入的字节数
  • 失败返回SOCKET_ERROR:通过函数得到相应的错误码,做出相应处理
if (SOCKET_ERROR == send(socketClient, "abcd", sizeof("abcd"), 0)) {//如果出错printf("send()函数出错,错误码:%d\n", WSAGetLastError);}

五、关于1500

  • 这个1500字节,发送的时候,协议要进行包装,加上协议信息,也叫协议头,或者叫包头,这个头不同协议不同网络层长度不同,我们的实际数据不能写满1500,要留出一部分给协议加上协议信息,数据才能正确发送到想发送的目的地。
  • 所以一般我们填1400或者1024字节都可以,自己要发送的数据加上包头小于1500就行。
  • 如果超过了就会被系统分成两个数据包发送,分片处理。如果这样的话要打包发送,接受方还要拆包处理,降低了效率。
  • 有的协议分包后二包直接丢了

Windows网络编程之send()函数相关推荐

  1. Windows网络编程之Winsock 编程接口实验

    实验一 Winsock 编程接口实验 1 实验类型 验证型实验 2 实验目的 1. 掌握Winsock 的启动和初始化: 2. 掌握gethostname(),gethostbyname(),GetA ...

  2. linux网络编程之Listen函数参数介绍

    1.listen()函数介绍 listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器, ...

  3. 网络编程之bind函数

    基本TCP客户端/服务器程序的套接字函数 1.bind函数把一个本地协议地址赋予一个套接字.对于网际协议,协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合. ...

  4. linux ioctl网络参数设置,Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  5. unix网络编程之socket函数

    目录 作用 内容 参数 int family int type int protocol 返回值 int 说明 作用 为了执行网络I/O,一个进程必须做的第一件事情就是调用socket函数,指定需要的 ...

  6. linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结

    1.setsockopt函数 头文件:#include <sys/types.h> #include <sys/socket.h>定义函数:int setsockopt(int ...

  7. 网络编程之 listen()函数的使用与三次握手的理解

    listen()函数 在进入我们的函数讲解前大家再回顾一下编写服务器端的流程 服务器端:socket()-->bind( )-->listen()-->accept()-->r ...

  8. 并发编程应用场景_linux网络编程之select函数的并发限制和poll函数应用举例

    一.用select实现的并发服务器,能达到的并发数,受两方面限制 1.一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n来调整或者使用setrlimit函数设置, ...

  9. 网络编程之listen函数

    基本TCP客户端/服务器程序的套接字函数 listen函数仅由TCP服务调用,它做两件事 1.当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect连接的 ...

  10. 网络编程之accept函数和accept函数在三次握手中的位置

    accept函数实际上是在三次握手之后,具体原因请看文章结尾具体解释. 基本TCP客户端/服务器程序的套接字函数 accept函数由TCP服务器调用,用于从已完成连接队列队头返回下一个已完成连接(从这 ...

最新文章

  1. 完全分布式部署Hadoop
  2. java并发编程之美-阅读记录10
  3. 傅里叶变换基本概念及复数类实现
  4. Java正則表達式詳解
  5. 网站本地调试工具_一款Web调试代理工具:Fiddler
  6. 东风来了的飞鸽传书源码
  7. 边工作边刷题:70天一遍leetcode: day 67-1
  8. linux下安装 Sublime Text 3
  9. mysql查询语句块_mysql查询语句
  10. iOS - Swift NSRect 位置和尺寸
  11. 数值分析(11)-数值积分
  12. iptables快速记忆总结
  13. feign session 调用_Feign调用session丢失解决方案
  14. jcp 打印机字体变淡变模糊bootstrap
  15. JAVA_HOME should point to a JDK not a JRE的一个解决办法
  16. 苹果手机升级后开不了机怎么办_iPhone8突然黑屏开不了机怎么办?西安苹果售后维修点教你这样解决...
  17. 谈谈我职业生涯中的三次潦倒 Leo病中的思考 续
  18. Chrome 扩展开发教程
  19. 基于PHP的校园失物招领平台(自动匹配推送)
  20. computed 和 watch的区别

热门文章

  1. String类型转换成json对象
  2. 2021年最新外卖侠cps小程序,三级分销返利外卖领劵小程序源码,带电影票分销积分商城(外卖侠重要功能)
  3. Excel2016 文件运行宏,出现可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用
  4. 2018年最新税收分类编码_如何免费在线进行2018年税收
  5. Java程序调用linux脚本-简单版
  6. 概率论——负二项随机变量
  7. mysql卸载详细教程
  8. mac 卸载mysql_Mac 电脑卸载mysql数据库
  9. cmd常用命令 cmd打开文件软件等
  10. VS2017官方下载链接