网络的一点问题请教

时间:2022-01-30 20:21:28
大家好,我本身并不是做网络开发方面的,
但是最近项目中需要做一些网络传输,碰到点问题,特向大家请教。
问题描述:
项目中需要在两台机之间实时的传输一些数据,A机程序把分析得到的数据(这些数据是在内存缓冲区的,不是硬盘文件)以数据包的形式发送给B机程序,B机程序接收这些数据以后进行分析处理
本来是比较简单的功能,但是因为数据包比较大,数据总量有50M左右,可以把它分成若干个小包,小包的大小也不等,有的可能不到1K,有的就有几十到几百K,并且总共数据量有多大,可以分多少个包,每个包数据有多大都是未知的。都是A机程在做完分析的工作以后动态生成的。
网络传输我用的TCP模式,建立管道,然后一对一进行传输。传输的模式是A机向B机传,每次传一个小包,传完为止。小包的大小不等,大的有几百K。
现在碰到的问题是,在XP SP2系统下一切正常,但是在XP SP3或 WIN2003系统下就不行,并且只是SP3或 WIN2003做为A机时不能发送完。从症状看可能是包大了发不出去。
请问各位高手是否碰到过类似的问题。应该怎么解决

7 个解决方案

#1


没人理啊。

#2


flyme,

如果你贴一些错误信息,比如error code,这些,也许大家更容易判断。

或者,你自己装个抓包软件,比如wireshark,抓包然后分析看看。可能就解决了。


千里孤行

#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,就是是抽丝拨茧的过程,慢慢分析,试验定位问题点。

#1


没人理啊。

#2


flyme,

如果你贴一些错误信息,比如error code,这些,也许大家更容易判断。

或者,你自己装个抓包软件,比如wireshark,抓包然后分析看看。可能就解决了。


千里孤行

#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,就是是抽丝拨茧的过程,慢慢分析,试验定位问题点。