要求是:
1.两台机器(A,B)安装Win2k/2003的PC机,千兆网卡,用交叉网线直接连接
2.数据是A机向B机单向发送,持续时间需20分钟,每秒需要发送1500-2000个数据包,每数据包长度固定,8472个字节,且每个数据包头4个字节是固定值
3.要求数据包丢失率在千分之一以下,不要求必须按顺序接收到我目前是采用CAsyncSocket类,TCP传输方式,B机起监听线程,两机器SNDBUF和RCVBUF均设为9000,TCP_NODELAY,同时在注册表里面将两机器MTU设定为9000是,收到的TCP包如果前4个字节不是那固定值就丢弃但是实验的结果是基本上要丢掉10-15%的数据包,请问原因会出在哪里呢,机器配置肯定是不成问题的,3.2G的双Xeon,4G RAM
1.两台机器(A,B)安装Win2k/2003的PC机,千兆网卡,用交叉网线直接连接
2.数据是A机向B机单向发送,持续时间需20分钟,每秒需要发送1500-2000个数据包,每数据包长度固定,8472个字节,且每个数据包头4个字节是固定值
3.要求数据包丢失率在千分之一以下,不要求必须按顺序接收到我目前是采用CAsyncSocket类,TCP传输方式,B机起监听线程,两机器SNDBUF和RCVBUF均设为9000,TCP_NODELAY,同时在注册表里面将两机器MTU设定为9000是,收到的TCP包如果前4个字节不是那固定值就丢弃但是实验的结果是基本上要丢掉10-15%的数据包,请问原因会出在哪里呢,机器配置肯定是不成问题的,3.2G的双Xeon,4G RAM
解决方案 »
- MFC的列表框不显示内容!!
- 获取其他窗口句柄 结束其他进程等问题?
- 简单的通信程序,客户端提示连接失败。
- Excel插件弹出的无模态对话框, Edit控件不能输入?
- [求助]ADO 操作 oracle的序列
- 请问大家碰到SetupDiEnumDeviceInterfaces总返回0时都是什么原因啊?
- 如何使用免费网络资源,内详,来者有分,分数不够随时加~
- 急!急!在线等待!关于利用winpcap编写arp程序的问题!
- 正式版Microsoft Visual Studio .NET的开发环境Microsoft2002 Version及Microsoft.NET框架1.0 Version分别是多少?
- 关于MCI编程,大送分?
- 小问题
- 如何解决用new分配大的空间时无法成功分配的情况?
得研究WinSock其他的模型了。
允许丢包而且不考虑接收顺序的话用UDP最合适。
你可以改为:B接收到判断后再通知A发送下一包
或者你不用判断,TCP连接是可靠的连接,只是在处理接收数据时,还是要小心了,是你程序自己丢了包,不要错Guai了网络
最好直接用Socket API封装罢了。
个人认为这个操作在这种配置(磁盘也是raid5)应该不会跟不上发包速度吧
SOCKET的buffer最大能够开多少?
接收的时候你可以直接用那个8472000的buffer去收,像这样:int size = 0;
while(size != 8472000)
{
int len = recv(socket, buffer + size, 8472000 - size, 0);
if(len == SOCKET_ERROR)
return;
size += len;
}
SwitchBuffer();
WriteToFile();