数据传输如何打包?

时间:2022-10-05 14:09:26
在编写程序时,想把一堆数据进行打包,然后再传输?
一般实时传输容易出错,能否自动判断数据的大小,
按时进行传输?
希望各高手不吝赐教!
谢谢!

9 个解决方案

#1


为什么说实时传输容易出错?按时传输又是什么意思?请把问题说清楚一些。
你的意思是不是说怕数据包太大,传输出错?
如果是这样,可以单起一个线程,分配一个缓冲区,要发送的时候,往缓冲区里添数据块,而发送线程则定时从缓冲区中取数据发送。缓冲区的访问必须使用信号量进行同步。

#2


xzw:好!
实时传输的如果是坐标,而mouse移动很快,那数据就会出错!
谢谢!

#3


通常这种实时传输,并不采用TCP来完成,像音频/视频数据都是采用UDP上的RTP来完成的。但它们都有一个特点:实时性比数据正确性更重要。如果实时传输的是坐标,而mouse移动很快,我们可以认为,实时性比正确性更重要,只要后面以最快的速度传来了现在的坐标,mouse中间移动的轨迹我们可以不要。所以我建议你采用UDP来传输数据包,如果你要求实时性的话。
另外,澄清一个问题,即使mouse移动很快,使用TCP传输,数据也不会出错,只是数据实时性较差而已。   那你可能会问,如果要实现UDP上的可靠传输怎么办?那就要实现TCP所实现的NACK,流量控制等算法了。通常所说的SRM(Scalable Reliable Multicast)可靠的多播协议就是完成这个任务的。希望能解决你的问题。

#4


xzw:好!
看了您的回答,我似乎懂了点.......
您能给我介绍实现的NACK,流量控制等算法吗?
比如:我在本机连续画点,本来只能接受一个点的坐标,而实际
收到的是一系列点的坐标,为了保证正确性,不能判断哪一点是
正确的,能给我一个解决办法吗?
谢谢!

#5


xzw说的精辟

#6


各位好!
如何限定数据的流量?
如:客户端(快速)连续移动mouse,而在服务器端却接受到一大批点
   如何限定点的数量,又能保证正确性!
再者:
   如何把坐标进行打包,用数组,数据库,链表或其它?
谢谢!

#7


抱歉这么晚才来回复,最近太忙了.
有关TCP的实现细节,有很多算法,可以参见坦尼拨母的Computer Network一书.
下面我简单地讲一下,NACK是对一个网络包没有接收到而作出的响应.通常NACK包会带一个序列号表明是哪一个包丢失了.发送方接收到NACK后,就根据包序列号进行重发.流量控制算法则通常是用一个滑动窗口表示当前接收方还能接收多少数据包,如果窗口满了就停止发.
如果自己编程序写,我想不用这么复杂和底层,大概估算一下每秒的数据流量,作出增加或较少数据量的决定就可以了.

客户端快速移动鼠标,可以每隔N点发送一次坐标,但是应该引入静止检测,当鼠标静止一段时间后,应该把当前坐标发送,防止出现双方不一致的情况.采用TCP传输,就可以保证正确性了.UDP包只要接到了,数据应该就是对的.
   把坐标打包很简单啊!放在TCP包里,X和Y各2个字节,注意网络字节顺序就是了.
   为什么要用数值/数据库或链表?????

#8


谢谢!
能给我发个E-mail
详细介绍
万分感谢!
befresh@263.net

#9


我还是没看明白!能给我介绍一下吗?

#1


为什么说实时传输容易出错?按时传输又是什么意思?请把问题说清楚一些。
你的意思是不是说怕数据包太大,传输出错?
如果是这样,可以单起一个线程,分配一个缓冲区,要发送的时候,往缓冲区里添数据块,而发送线程则定时从缓冲区中取数据发送。缓冲区的访问必须使用信号量进行同步。

#2


xzw:好!
实时传输的如果是坐标,而mouse移动很快,那数据就会出错!
谢谢!

#3


通常这种实时传输,并不采用TCP来完成,像音频/视频数据都是采用UDP上的RTP来完成的。但它们都有一个特点:实时性比数据正确性更重要。如果实时传输的是坐标,而mouse移动很快,我们可以认为,实时性比正确性更重要,只要后面以最快的速度传来了现在的坐标,mouse中间移动的轨迹我们可以不要。所以我建议你采用UDP来传输数据包,如果你要求实时性的话。
另外,澄清一个问题,即使mouse移动很快,使用TCP传输,数据也不会出错,只是数据实时性较差而已。   那你可能会问,如果要实现UDP上的可靠传输怎么办?那就要实现TCP所实现的NACK,流量控制等算法了。通常所说的SRM(Scalable Reliable Multicast)可靠的多播协议就是完成这个任务的。希望能解决你的问题。

#4


xzw:好!
看了您的回答,我似乎懂了点.......
您能给我介绍实现的NACK,流量控制等算法吗?
比如:我在本机连续画点,本来只能接受一个点的坐标,而实际
收到的是一系列点的坐标,为了保证正确性,不能判断哪一点是
正确的,能给我一个解决办法吗?
谢谢!

#5


xzw说的精辟

#6


各位好!
如何限定数据的流量?
如:客户端(快速)连续移动mouse,而在服务器端却接受到一大批点
   如何限定点的数量,又能保证正确性!
再者:
   如何把坐标进行打包,用数组,数据库,链表或其它?
谢谢!

#7


抱歉这么晚才来回复,最近太忙了.
有关TCP的实现细节,有很多算法,可以参见坦尼拨母的Computer Network一书.
下面我简单地讲一下,NACK是对一个网络包没有接收到而作出的响应.通常NACK包会带一个序列号表明是哪一个包丢失了.发送方接收到NACK后,就根据包序列号进行重发.流量控制算法则通常是用一个滑动窗口表示当前接收方还能接收多少数据包,如果窗口满了就停止发.
如果自己编程序写,我想不用这么复杂和底层,大概估算一下每秒的数据流量,作出增加或较少数据量的决定就可以了.

客户端快速移动鼠标,可以每隔N点发送一次坐标,但是应该引入静止检测,当鼠标静止一段时间后,应该把当前坐标发送,防止出现双方不一致的情况.采用TCP传输,就可以保证正确性了.UDP包只要接到了,数据应该就是对的.
   把坐标打包很简单啊!放在TCP包里,X和Y各2个字节,注意网络字节顺序就是了.
   为什么要用数值/数据库或链表?????

#8


谢谢!
能给我发个E-mail
详细介绍
万分感谢!
befresh@263.net

#9


我还是没看明白!能给我介绍一下吗?