但是最近项目中需要做一些网络传输,碰到点问题,特向大家请教。
问题描述:
项目中需要在两台机之间实时的传输一些数据,A机程序把分析得到的数据(这些数据是在内存缓冲区的,不是硬盘文件)以数据包的形式发送给B机程序,B机程序接收这些数据以后进行分析处理
本来是比较简单的功能,但是因为数据包比较大,数据总量有50M左右,可以把它分成若干个小包,小包的大小也不等,有的可能不到1K,有的就有几十到几百K,并且总共数据量有多大,可以分多少个包,每个包数据有多大都是未知的。都是A机程在做完分析的工作以后动态生成的。
网络传输我用的TCP模式,建立管道,然后一对一进行传输。传输的模式是A机向B机传,每次传一个小包,传完为止。小包的大小不等,大的有几百K。
现在碰到的问题是,在XP SP2系统下一切正常,但是在XP SP3或 WIN2003系统下就不行,并且只是SP3或 WIN2003做为A机时不能发送完。从症状看可能是包大了发不出去。
请问各位高手是否碰到过类似的问题。应该怎么解决
7 个解决方案
#1
没人理啊。
#3
发送缓冲区不够大,你可以设置缓冲区大小。或者把包再拆小,小于8192bytes试试。
#4
是不是MTU不同造成的?
#5
以太网传输报文超过1536字节就要分片了,可以控制一下报文的长度,保证在IP层不需要分片。
#6
分片是tcp协议进行的,应用层不需要干预,你需要确定A机器之前发送的包B机器都已经接收了,如果B堵住了,A自然也发不出去了。
#7
1、先确定下防火墙是否阻止了传输。
2、确定不同实验仅仅是OS不同吗?是不是网络也有不同,比如成功的是简单网络环境,失败的是稍复杂的网络环境,如经过Switch等,Switch是否有特殊设置,都确认下。
3、如防火墙已经关闭网络环境相同,那就先把A端程序调小,仅发送一个简单字串看看是否可以接到。加入你在XP Sp2没问题,那么这应该没什么问题才对。
4、在A端程序加Log看是否Send 成功。
5、在B端程序加Log,看是否Receive成功,还是出现在分析逻辑上
6、可以考虑用Sniffer等软件监控下B端的收包情况。
别着急,处理Bug,就是是抽丝拨茧的过程,慢慢分析,试验定位问题点。
2、确定不同实验仅仅是OS不同吗?是不是网络也有不同,比如成功的是简单网络环境,失败的是稍复杂的网络环境,如经过Switch等,Switch是否有特殊设置,都确认下。
3、如防火墙已经关闭网络环境相同,那就先把A端程序调小,仅发送一个简单字串看看是否可以接到。加入你在XP Sp2没问题,那么这应该没什么问题才对。
4、在A端程序加Log看是否Send 成功。
5、在B端程序加Log,看是否Receive成功,还是出现在分析逻辑上
6、可以考虑用Sniffer等软件监控下B端的收包情况。
别着急,处理Bug,就是是抽丝拨茧的过程,慢慢分析,试验定位问题点。
#1
没人理啊。
#2
#3
发送缓冲区不够大,你可以设置缓冲区大小。或者把包再拆小,小于8192bytes试试。
#4
是不是MTU不同造成的?
#5
以太网传输报文超过1536字节就要分片了,可以控制一下报文的长度,保证在IP层不需要分片。
#6
分片是tcp协议进行的,应用层不需要干预,你需要确定A机器之前发送的包B机器都已经接收了,如果B堵住了,A自然也发不出去了。
#7
1、先确定下防火墙是否阻止了传输。
2、确定不同实验仅仅是OS不同吗?是不是网络也有不同,比如成功的是简单网络环境,失败的是稍复杂的网络环境,如经过Switch等,Switch是否有特殊设置,都确认下。
3、如防火墙已经关闭网络环境相同,那就先把A端程序调小,仅发送一个简单字串看看是否可以接到。加入你在XP Sp2没问题,那么这应该没什么问题才对。
4、在A端程序加Log看是否Send 成功。
5、在B端程序加Log,看是否Receive成功,还是出现在分析逻辑上
6、可以考虑用Sniffer等软件监控下B端的收包情况。
别着急,处理Bug,就是是抽丝拨茧的过程,慢慢分析,试验定位问题点。
2、确定不同实验仅仅是OS不同吗?是不是网络也有不同,比如成功的是简单网络环境,失败的是稍复杂的网络环境,如经过Switch等,Switch是否有特殊设置,都确认下。
3、如防火墙已经关闭网络环境相同,那就先把A端程序调小,仅发送一个简单字串看看是否可以接到。加入你在XP Sp2没问题,那么这应该没什么问题才对。
4、在A端程序加Log看是否Send 成功。
5、在B端程序加Log,看是否Receive成功,还是出现在分析逻辑上
6、可以考虑用Sniffer等软件监控下B端的收包情况。
别着急,处理Bug,就是是抽丝拨茧的过程,慢慢分析,试验定位问题点。