关于SOCKET 接收发送 缓冲区 测试 SO_SNDBUF
2015-09-17 18:44
316 查看
一直以来对网络都很感兴趣
今天对SOCKET的发送接收缓冲区做了测试
测试过程 文字描述如下
服务端 伪代码
g_ListenSock2 =socket(AF_INET,SOCK_STREAM,0);
然后bind
然后 listen(g_ListenSock2
然后设置了发送缓冲与接收缓冲大小
int nSize = 1000*512;
setsockopt(g_ListenSock2,SOL_SOCKET,SO_RCVBUF,(char*)&nSize ,sizeof(int));
setsockopt(g_ListenSock2,SOL_SOCKET,SO_SNDBUF,(char*)&nSize ,sizeof(int));
然后开启线程,在线程里accept 阻塞调用
客户端代码 简单 创建SOCKET 然后连接服务 也为阻塞socket 客户端得到的默认接收缓冲区大小为65536 也就是64K
当客户端连接到服务端时,int nLen = sizeof(int);
在服务端accept后,返回g_ClientSock 我们的到g_ClientSock的接收缓冲 结果为512000 也就是 服务端的监听套接字的缓冲大小,多次测试总结出 其缓冲区大小继承了监听套接字的缓冲区大小 结果nDefRecvBufSize = 512000
getsockopt(g_ClientSock,SOL_SOCKET,SO_RCVBUF,(char*)&nDefRecvBufSize,&nLen);
在另外的按钮消息响应函数里 我们发送数据,个人以前一直以为 我客户端不接收的情况下 服务端最多也就能发送设置的缓冲区大小的字节,这里即也就是最多能发送512000字节,
可测试结果大跌眼镜
当我第一次发送数据小于512000时,第二次是完全可以发送512000大小的,测试发现 第一次发送缓冲区大小为1--511999(512000-1)时,第二次调用总是能发送成功512000字节大小,测试环境为win8 vs2010。客户端一个字节也不接收,也就是说这时候服务端第一次发送小于设定缓冲区大小时,第二次完全可以发送缓冲区大小数据的。
在异步下做测试
今天对SOCKET的发送接收缓冲区做了测试
测试过程 文字描述如下
服务端 伪代码
g_ListenSock2 =socket(AF_INET,SOCK_STREAM,0);
然后bind
然后 listen(g_ListenSock2
然后设置了发送缓冲与接收缓冲大小
int nSize = 1000*512;
setsockopt(g_ListenSock2,SOL_SOCKET,SO_RCVBUF,(char*)&nSize ,sizeof(int));
setsockopt(g_ListenSock2,SOL_SOCKET,SO_SNDBUF,(char*)&nSize ,sizeof(int));
然后开启线程,在线程里accept 阻塞调用
客户端代码 简单 创建SOCKET 然后连接服务 也为阻塞socket 客户端得到的默认接收缓冲区大小为65536 也就是64K
当客户端连接到服务端时,int nLen = sizeof(int);
在服务端accept后,返回g_ClientSock 我们的到g_ClientSock的接收缓冲 结果为512000 也就是 服务端的监听套接字的缓冲大小,多次测试总结出 其缓冲区大小继承了监听套接字的缓冲区大小 结果nDefRecvBufSize = 512000
getsockopt(g_ClientSock,SOL_SOCKET,SO_RCVBUF,(char*)&nDefRecvBufSize,&nLen);
在另外的按钮消息响应函数里 我们发送数据,个人以前一直以为 我客户端不接收的情况下 服务端最多也就能发送设置的缓冲区大小的字节,这里即也就是最多能发送512000字节,
可测试结果大跌眼镜
当我第一次发送数据小于512000时,第二次是完全可以发送512000大小的,测试发现 第一次发送缓冲区大小为1--511999(512000-1)时,第二次调用总是能发送成功512000字节大小,测试环境为win8 vs2010。客户端一个字节也不接收,也就是说这时候服务端第一次发送小于设定缓冲区大小时,第二次完全可以发送缓冲区大小数据的。
在异步下做测试
相关文章推荐
- Activity总结
- 函数后面加const
- 蘑菇街2015校招技术类笔试题A卷,回忆版(杭州站)
- Android中GridView使用
- Cocos2d-x从入门到精通第17课《变速动作》
- Linux信号编程实践(二) 信号发送函数和可重入函数
- 日记 - aop
- 在Eclipse里查看Java字节码
- 二叉树的遍历-递归与非递归 - 海子
- httpd: Could not reliably determine the server's fully qualified domain name
- MIPS 通用寄存器
- JS事件知识的一些小整理
- Android Studio中aidl文件生成java文件
- SQL Server学习记录之set nocount on
- 如何生成DLL工程
- Android Make脚本简记
- Arcgis For Android 实现元素屏幕居中
- 谈谈session的生命周期
- Struts2 显示日期类型
- java.net.SocketException四大异常解决方案