为什么socket通信接收数据少1字节. 诚心求解
小弟现在在写个网管程序管理一台设备,用SOCKET通信(设备服务端,网管程序客户端)。以前这设备用的老系统,通信没有故障,什么问题都没有。
现在设备换了新系统,问题就来了,该设备与windows 2000的通信没有问题(只有1台机器是2000的),和XP的机器通信就会少接一个字节,而最后个字节是一个分号,是一个命令的结束符。没它就会解析出问题。现在的解决办法是让设备每次多发1字节,然后如果是2000机器接到多的字节就把它处理掉。但是老板不满意我这种做法。
我用delphi 和C都写过客户端程序,测试时发送握手命令。连接新系统结果是,只要程序在2000上运行,就收80字节,在XP上运行,就收79字节。
然后又测试老系统。结果是,都收到80字节。
本来应该就判断是他新系统出的问题,但是用SNIFFER截包看来,设备确实发了80个字节。我仔细对照了包的每个字段,觉得完全没有问题啊,唯一的一点区别就是新系统发XP的时候TCP包头多了12字节的options-padding,这就会导致XP少收1字节?
当时去调设备的时候急,就截了SNIFFER的4张图,分别是老系统发2000,老系统发XP,新系统发2000,和新系统发XP的,不知道怎么把图放出来。这个问题听着就很荒唐,百度也搜不到任何信息,周围高手纷纷表示没听说过,我都不知道怎么办了。
现在设备换了新系统,问题就来了,该设备与windows 2000的通信没有问题(只有1台机器是2000的),和XP的机器通信就会少接一个字节,而最后个字节是一个分号,是一个命令的结束符。没它就会解析出问题。现在的解决办法是让设备每次多发1字节,然后如果是2000机器接到多的字节就把它处理掉。但是老板不满意我这种做法。
我用delphi 和C都写过客户端程序,测试时发送握手命令。连接新系统结果是,只要程序在2000上运行,就收80字节,在XP上运行,就收79字节。
然后又测试老系统。结果是,都收到80字节。
本来应该就判断是他新系统出的问题,但是用SNIFFER截包看来,设备确实发了80个字节。我仔细对照了包的每个字段,觉得完全没有问题啊,唯一的一点区别就是新系统发XP的时候TCP包头多了12字节的options-padding,这就会导致XP少收1字节?
当时去调设备的时候急,就截了SNIFFER的4张图,分别是老系统发2000,老系统发XP,新系统发2000,和新系统发XP的,不知道怎么把图放出来。这个问题听着就很荒唐,百度也搜不到任何信息,周围高手纷纷表示没听说过,我都不知道怎么办了。
...全文
相关推荐
利用socket连续发送与连续接收数据
刚刚学习socket的时候编写的程序,可以实现客户端连续向服务器发送三个数据,服务器端连续接受三个数据并返回给客户端处理结果
socket实现UDP通信
UDP与TCP不同,是一种无连接的通信方式,相比TCP而言更加灵活。 利用socket实现UDP的方式相比TCP而言也更加简单。 发送方: 1.初始化套接字 2.创建socket 3.利用sendto发送数据(TCP是send) 4.关闭socket 接收方: 1.初始化套接字 2.创建socket并与本机进行绑定 3.利用recvfrom接收数据 4.关闭socket
socket网络通信 接收数据并写入数据库
socket网络编程通信 接收数据并写入数据库,数据库用的sqlite3 后期移植到arm平台上的 .c源代码 给有需要的人参考
C实现基于Socket实现自定义协议通信
掌握C语言形式的Socket编程接又用法,能够正确发送和接收网络数据包; 分为客户端和服务端
C++服务器与java进行socket通信案例
C++服务器与java进行socket通信案例


