Windows网络编程之send()函数
一、作用
向目标发送数据,本质上就是将数据复制粘贴进系统的协议发送缓冲区,计算机伺机发送出去
二、句法
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就行
其他:
- MSG_OOB:传输一段数据,再外带一个额外的特殊数据,但不建议使用,一般忽略就行
- 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()函数相关推荐
- Windows网络编程之Winsock 编程接口实验
实验一 Winsock 编程接口实验 1 实验类型 验证型实验 2 实验目的 1. 掌握Winsock 的启动和初始化: 2. 掌握gethostname(),gethostbyname(),GetA ...
- linux网络编程之Listen函数参数介绍
1.listen()函数介绍 listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器, ...
- 网络编程之bind函数
基本TCP客户端/服务器程序的套接字函数 1.bind函数把一个本地协议地址赋予一个套接字.对于网际协议,协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合. ...
- linux ioctl网络参数设置,Linux 网络编程之ioctl函数
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...
- unix网络编程之socket函数
目录 作用 内容 参数 int family int type int protocol 返回值 int 说明 作用 为了执行网络I/O,一个进程必须做的第一件事情就是调用socket函数,指定需要的 ...
- linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结
1.setsockopt函数 头文件:#include <sys/types.h> #include <sys/socket.h>定义函数:int setsockopt(int ...
- 网络编程之 listen()函数的使用与三次握手的理解
listen()函数 在进入我们的函数讲解前大家再回顾一下编写服务器端的流程 服务器端:socket()-->bind( )-->listen()-->accept()-->r ...
- 并发编程应用场景_linux网络编程之select函数的并发限制和poll函数应用举例
一.用select实现的并发服务器,能达到的并发数,受两方面限制 1.一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n来调整或者使用setrlimit函数设置, ...
- 网络编程之listen函数
基本TCP客户端/服务器程序的套接字函数 listen函数仅由TCP服务调用,它做两件事 1.当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect连接的 ...
- 网络编程之accept函数和accept函数在三次握手中的位置
accept函数实际上是在三次握手之后,具体原因请看文章结尾具体解释. 基本TCP客户端/服务器程序的套接字函数 accept函数由TCP服务器调用,用于从已完成连接队列队头返回下一个已完成连接(从这 ...
最新文章
- 完全分布式部署Hadoop
- java并发编程之美-阅读记录10
- 傅里叶变换基本概念及复数类实现
- Java正則表達式詳解
- 网站本地调试工具_一款Web调试代理工具:Fiddler
- 东风来了的飞鸽传书源码
- 边工作边刷题:70天一遍leetcode: day 67-1
- linux下安装 Sublime Text 3
- mysql查询语句块_mysql查询语句
- iOS - Swift NSRect 位置和尺寸
- 数值分析(11)-数值积分
- iptables快速记忆总结
- feign session 调用_Feign调用session丢失解决方案
- jcp 打印机字体变淡变模糊bootstrap
- JAVA_HOME should point to a JDK not a JRE的一个解决办法
- 苹果手机升级后开不了机怎么办_iPhone8突然黑屏开不了机怎么办?西安苹果售后维修点教你这样解决...
- 谈谈我职业生涯中的三次潦倒 Leo病中的思考 续
- Chrome 扩展开发教程
- 基于PHP的校园失物招领平台(自动匹配推送)
- computed 和 watch的区别