【发布时间】:2013-07-09 06:57:18
【问题描述】:
我在服务器和客户端之间建立了一对一的连接。服务器正在流式传输实时音频/视频数据。
我的问题可能听起来很奇怪,但我应该使用多个端口/套接字还是只使用一个?使用多个端口更快还是使用单个端口提供更好的性能?我应该有一个端口只用于消息,一个用于视频,一个用于音频,还是将整个内容打包在一个端口中更简单?
我当前的一个问题是我需要首先发送当前帧的大小,因为大小(以字节为单位)可能会从一帧更改为下一帧。我对网络相当陌生,但我还没有找到任何机制可以自动检测正在传输的特定对象的正确范围。例如,如果我发送一个 2934 字节长的数据包,我真的需要告诉接收者该数据包的大小吗?
我首先尝试在帧进入时尽可能快地打包帧,但我发现接收端有时无法获得适当的字节数。大多数时候,它的读取速度比我发送它们的速度要快,只得到部分帧。什么是尽可能快地只获得适当数量的字节的最佳方法?
还是我看起来太低了,并且有一个更高级别的类/框架用于处理对象传输?
【问题讨论】:
-
您应该做的最重要的事情就是完全忘记数据包。 TCP 连接是一个流,因此任何数据描述都需要由you(协议)处理。
-
另外,UDP 数据报通常用于流式传输。
-
@JonathonReinhart:它可能是一个流,但我需要将它切成数据包 - 或帧 - 否则客户端只会处理垃圾 - 半帧或重叠帧。我根本不知道这样做的最好或最有效的方法是什么。显然,我需要做的不仅仅是将数据推送到管道中并希望获得最好的结果。
-
这就是我要说的,你需要想出一个协议,上面写着“嘿,这是我身后的数据”。我是说你应该忘记在你的流下面流动的实际 TCP/IP 数据包。
-
但实际上,你应该考虑using UDP for streaming protocols。
标签: c# networking tcp streaming