请教:MFC TCP/IP使用Receive接收数据,网络不好的情况下,发送方和接收方的数据不一致,何故呢
请问:MFC TCP/IP使用Receive接收数据,网络不好的情况下,发送方和接收方的数据不一致,何故呢?
请问:MFC TCP/IP使用Receive接收数据,网络不好的情况下,发送方和接收方的数据不一致,何故呢?recSo.Receive(buff,6250)
得到的数据,发现,接收方和发送方的数据不一致,我发送的是6250个字节,接收方接收到的长度也是6250,但是,发现有一部分数据是重复的,比如头200个字节实际上跟后200个字节是一样的了,也就是说丢了一部分数据,请问,为什么会出现这种情况呢?是我网络不佳,(wifi的信号很低,局域网内传输)导致TCP IP重发导致的数据重复吗?
还是我一次不应该接收那么大的数据呀,6250好像也不大呀?
------解决方案--------------------
发现楼主ID跟我前面很像。。。先mark一个
TCP的话应该不会有这种情况,没用过封装的Receive函数,不知道里面是怎样的
------解决方案--------------------
tcp 数据不会丢失,你可以看这的socket例子:
http://download.****.net/detail/geoff08zhang/4571358
------解决方案--------------------
rsd是我第一次接触电脑时乱打用的游戏名字
------解决方案--------------------
你多次尝试都是同样的内容还是有不一样的内容??
------解决方案--------------------
应该不会有这样的事情发生,TCP就是用于在不可靠的网络上实现可靠的通信,如果包不正确,则包会丢弃,并请求重传;应该不会出现数据混乱!
估计是不是LZ检查数据的时候,看走眼了,呵呵
------解决方案--------------------
不知道这样写会不会遇0后msg就停止了
------解决方案--------------------
既然你是写入txt就没必要用CString了吧
另外你不buff那么大,Receive中才用6250?不清楚Receive里面是怎样做的
msg+=buff;这里应该是遇0就会停止,所以数据就会漏掉
------解决方案--------------------
整形数据,有int的结构体?在recv的过程中按字节接收,buff中肯定会有存在0的情况
------解决方案--------------------
那就需要你逐行调试看看其中的结果了
请问:MFC TCP/IP使用Receive接收数据,网络不好的情况下,发送方和接收方的数据不一致,何故呢?recSo.Receive(buff,6250)
得到的数据,发现,接收方和发送方的数据不一致,我发送的是6250个字节,接收方接收到的长度也是6250,但是,发现有一部分数据是重复的,比如头200个字节实际上跟后200个字节是一样的了,也就是说丢了一部分数据,请问,为什么会出现这种情况呢?是我网络不佳,(wifi的信号很低,局域网内传输)导致TCP IP重发导致的数据重复吗?
还是我一次不应该接收那么大的数据呀,6250好像也不大呀?
TCP/IP
数据重复
CSocket
------解决方案--------------------
发现楼主ID跟我前面很像。。。先mark一个
TCP的话应该不会有这种情况,没用过封装的Receive函数,不知道里面是怎样的
------解决方案--------------------
tcp 数据不会丢失,你可以看这的socket例子:
http://download.****.net/detail/geoff08zhang/4571358
------解决方案--------------------
rsd是我第一次接触电脑时乱打用的游戏名字
------解决方案--------------------
tcp 数据不会丢失,你可以看这的socket例子:
http://download.****.net/detail/geoff08zhang/4571358
网络好的话,我这么用没问题,这种情况也只是遇到过一次,当时两个屋子隔了两道墙,信号是拿两个无线路由中继连接的,我发送一次数据6250个字节,计时要10S左右才能收到,不知道是不是网络不好,一直重发的原因导致时间过长吗?就在一个局域网中,按理来说不能这么慢的呀
你多次尝试都是同样的内容还是有不一样的内容??
------解决方案--------------------
请问:MFC TCP/IP使用Receive接收数据,网络不好的情况下,发送方和接收方的数据不一致,何故呢?recSo.Receive(buff,6250)
得到的数据,发现,接收方和发送方的数据不一致,我发送的是6250个字节,接收方接收到的长度也是6250,但是,发现有一部分数据是重复的,比如头200个字节实际上跟后200个字节是一样的了,也就是说丢了一部分数据,请问,为什么会出现这种情况呢?是我网络不佳,(wifi的信号很低,局域网内传输)导致TCP IP重发导致的数据重复吗?
还是我一次不应该接收那么大的数据呀,6250好像也不大呀?
应该不会有这样的事情发生,TCP就是用于在不可靠的网络上实现可靠的通信,如果包不正确,则包会丢弃,并请求重传;应该不会出现数据混乱!
估计是不是LZ检查数据的时候,看走眼了,呵呵
------解决方案--------------------
tcp 数据不会丢失,你可以看这的socket例子:
http://download.****.net/detail/geoff08zhang/4571358
网络好的话,我这么用没问题,这种情况也只是遇到过一次,当时两个屋子隔了两道墙,信号是拿两个无线路由中继连接的,我发送一次数据6250个字节,计时要10S左右才能收到,不知道是不是网络不好,一直重发的原因导致时间过长吗?就在一个局域网中,按理来说不能这么慢的呀
你多次尝试都是同样的内容还是有不一样的内容??
char buff[65535]={0};
CString msg = "";
int ret=0;
for(;;)
{
ret=recSo.Receive(buff,6250);
if(ret==0)
break;
msg+=buff;
}
我获取数据部分这么写的,貌似不太对吧
不知道这样写会不会遇0后msg就停止了
------解决方案--------------------
既然你是写入txt就没必要用CString了吧
另外你不buff那么大,Receive中才用6250?不清楚Receive里面是怎样做的
msg+=buff;这里应该是遇0就会停止,所以数据就会漏掉
------解决方案--------------------
既然你是写入txt就没必要用CString了吧
另外你不buff那么大,Receive中才用6250?不清楚Receive里面是怎样做的
msg+=buff;这里应该是遇0就会停止,所以数据就会漏掉
没,发送的数据还是整形数据的,我是发送完之后,存了一份txt,一是为了备份,另外为了对比一下接收的是否正确,后来发现不正确
整形数据,有int的结构体?在recv的过程中按字节接收,buff中肯定会有存在0的情况
------解决方案--------------------
既然你是写入txt就没必要用CString了吧
另外你不buff那么大,Receive中才用6250?不清楚Receive里面是怎样做的
msg+=buff;这里应该是遇0就会停止,所以数据就会漏掉
没,发送的数据还是整形数据的,我是发送完之后,存了一份txt,一是为了备份,另外为了对比一下接收的是否正确,后来发现不正确
整形数据,有int的结构体?在recv的过程中按字节接收,buff中肯定会有存在0的情况
有道理,不过中断了,为什么还会重复呢
那就需要你逐行调试看看其中的结果了