D dyb Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-08 #1 想不停发送视频数据,本想用UDP以实现高速收发,但数据拼装成问题,无法可靠重组一桢图象。SOCKET怎样实现可靠通讯?一桢图象数据可能超出WINSOCK用的BUFFER长度。哪位能给个解决方法?
J Jetideas Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-08 #2 UDP不能保证数据的可靠传输!我曾经试过,UDP每个包大约不能超过2KB,否则会丢失。如果想可靠地传送数据,请用Socket。但每个包仍不能大于2KB。 另外,你可以用流来传送数据(stream)。然后再把流拼装起来。
UDP不能保证数据的可靠传输!我曾经试过,UDP每个包大约不能超过2KB,否则会丢失。如果想可靠地传送数据,请用Socket。但每个包仍不能大于2KB。 另外,你可以用流来传送数据(stream)。然后再把流拼装起来。
C cytown Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-08 #3 use tcp, no udp! 当然要用stream来传了.
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-08 #4 UDP和TCP的底层都是IP协议, 所以从底层来看两者区别不大, UDP在错误时不进行重发, 并不保证接受到的数据正确(它也提供数据报校验和, 校验和的计算与 TCP相同, 只是处理不同). TCP反复重发直到正确. 可靠通讯用tcp协议发送, 一般情况不必关心发送数据的大小,socket程序会将它分割成合适的 tcp报进行发送, 然后会根据接收到的tcp报拼装之后提交用户(tcp报文中有指示是否发送完成 的标记位).
UDP和TCP的底层都是IP协议, 所以从底层来看两者区别不大, UDP在错误时不进行重发, 并不保证接受到的数据正确(它也提供数据报校验和, 校验和的计算与 TCP相同, 只是处理不同). TCP反复重发直到正确. 可靠通讯用tcp协议发送, 一般情况不必关心发送数据的大小,socket程序会将它分割成合适的 tcp报进行发送, 然后会根据接收到的tcp报拼装之后提交用户(tcp报文中有指示是否发送完成 的标记位).
J Jetideas Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-08 #5 dyb所说的数据包和tcp在网络协议层指的不是一个概念。当你定义一个大于2KB的 数组,然后发送出去,就会丢失,这和tcp的自动分组无关。 还有,在Delphi的tcp中有个现象,就是包越小,tcp的发送/接受速度越慢。
dyb所说的数据包和tcp在网络协议层指的不是一个概念。当你定义一个大于2KB的 数组,然后发送出去,就会丢失,这和tcp的自动分组无关。 还有,在Delphi的tcp中有个现象,就是包越小,tcp的发送/接受速度越慢。
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-08 #6 Jetideas测的是ip包吧? 一个ip包不超过2k的. 但是TCP包允许一次发送65536字节(不包含TCP头)
方 方栩 Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-09 #7 我以前也碰到过这个问题,用Stream,不过依然不能超过2k,不知为何.
G guo_qpeter Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-09 #8 我没用过DELPHI 下的 SOCKET 控件. 但我在 SUN SOLARIS 2.5.1/2.6 和 SCO UNIX 3.2.4/5.0 下开发过 SOCKET 程序 用于实时传送数据. 在C 中 传送和接受用 READ/WRITE 两个函数.你自己要写函数 READN/WRITEN 来保证BUFFER钟的数据都被读写. 我自定义BUFFER为4K.传送速度很快. 所以我想SOCKET控件应该可发送>2K的数据. 有空我也试试
我没用过DELPHI 下的 SOCKET 控件. 但我在 SUN SOLARIS 2.5.1/2.6 和 SCO UNIX 3.2.4/5.0 下开发过 SOCKET 程序 用于实时传送数据. 在C 中 传送和接受用 READ/WRITE 两个函数.你自己要写函数 READN/WRITEN 来保证BUFFER钟的数据都被读写. 我自定义BUFFER为4K.传送速度很快. 所以我想SOCKET控件应该可发送>2K的数据. 有空我也试试
C CJ Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-09 #9 推荐用UDP,如果真的错了,在重复发送,那么这玩意还... 发送STREAM好象没有大小限制吧?当然IP包可能是是2K
W Wysywyg Unregistered / Unconfirmed GUEST, unregistred user! 1999-09-14 #10 我用NMUDP传送5K数据流时得到内存读写错误,简直是...