我刚从networking编程考试中回到家,他们问我们的一个问题是“如果你要stream式传输video,你会使用TCP还是UDP?给存储video和现场videostream解释一下” 。 对于这个问题,他们只是简单地期望对存储的video和UDP的实时video的TCP简短的回答,但我在回家的路上想过这个,是否更好地使用UDPstream媒体直播video? 我的意思是,如果你有足够的带宽,并且说你正在进行足球比赛或演唱会,你真的需要使用UDP吗? 比方说,当你正在播放这个音乐会或者使用TCP的任何东西的时候,你会开始丢失数据包(在你和发送者之间的某个networking中发生了一些不好的事情),并且整整一分钟你都没有收到数据包。 videostream将暂停,并在一分钟之后,数据包开始再次通过(IP为您find一条新的路线)。 接下来会发生的事情就是,TCP会在你丢失的那一刻重新传输,并继续向你发送实时stream。 作为一个假设,带宽高于stream上的比特率,并且ping不是太高,所以在很短的时间内,你丢失的那一分钟将作为你的stream的缓冲区,这样,如果丢包再次发生,你将不会注意到。 现在,我可以想到一些设备,这不是一个好主意,比如video会议,因为在video聊天过程中的延迟是非常可怕的,所以你总是需要在videostream的尽头。在足球比赛或者音乐会期间,如果你是在stream后面的一分钟,那么它有什么关系? 此外,您可以保证获得所有数据,最好保存以备以后查看。 所以这使我想到了我的问题。 有什么缺点,我不知道使用TCP实时stream媒体? 还是应该是真的,如果你有带宽的话,你应该去TCP,因为它对networking(stream量控制)来说是“更好的”?
我正在编写一个JavaScript应用程序,必须从其他用户接收大量的数据。 如果有些数据丢失,这并不重要。 有没有使用JavaScript的WebSockets与UDP而不是TCP的方式?
我应该如何为我的应用程序select一个IPv4多播地址? 我可能需要不止一个(最终可能是整个范围),但只是想避免与其他应用程序的冲突。 数据包将完全包含在一个pipe理域中,可能是一个局域网 如果我的应用程序有几个独立的实例在同一个networking上使用,他们可以分别使用自己的多播地址 – 但是如果它们不这样做,它们将能够共存,它们只会有less量开销忽略彼此的包。 我的数据包已经包含一个“幻数”来避免问题 我会检查发件人的地址(我知道这个地址可以被欺骗),TTL和其他的东西,以防止意外的数据包被淹没。 想法请:) 目前我刚从“本地使用”空间239.255.42.99分配了一个任意的
我如何将一个UDP端口从我的Docker容器转发到主机?
我想只发送一个UDP数据包中的短值,但是运行该命令 echo -n "hello" | nc -4u localhost 8000 我可以看到服务器得到你好的东西,但我不得不按Ctrl + C退出netcat命令。 发送问候后如何退出? 对不起,对于噪音,我重新阅读手册页,并find了-q选项。 echo -n "hello" | nc -4u -q1 localhost 8000 作品(1秒后退出)。 出于某种原因,它不适用于-q0 。
这可能是一个愚蠢的问题: HTTP是否使用用户数据报协议? 例如,如果使用HTTP通过networkingstream式传输MP3或video,是否在内部使用UDP进行传输?
传统的IPv4虚线四进制表示法将地址与端口用冒号分开,如在回送接口上的web服务器的示例中所示: 127.0.0.1:80 但使用IPv6表示法,地址本身可以包含冒号。 例如,这是回送地址的简写forms: ::1 如何用IPv6地址/端口端点的文本表示来表示端口(或其function等同物)?
对不起长度,这是有必要的。 介绍 我正在为Windows Vista / 7在C#4.0中开发一个远程桌面软件(只是为了好玩)。 我已经经历了一些基本的障碍:我有一个强大的UDP消息传递系统,相对干净的程序devise,我有一个镜像驱动程序(DemoForge的免费DFMirage镜像驱动程序)启动并运行,我已经实现了所有NAT穿越除了对称NAT之外的NATtypes(存在于企业防火墙情况下)。 关于屏幕传输/共享,感谢镜像驱动程序,我自动通知更改的屏幕区域,我可以简单地将镜像驱动程序的不断变化的屏幕位图编组到我自己的位图。 然后我把这个屏幕区域压缩成PNG格式,然后把它从服务器发送到我的客户端。 事情看起来不错,但速度不够快。 它和VNC一样慢(顺便说一句,我没有使用VNC协议,只是一个自定义的业余协议)。 从最慢的远程桌面软件到最快的列表,通常从类似VNC的实现开始,然后爬上Microsoft Windows远程桌面…然后… TeamViewer。 不太确定CrossLoop,LogMeIn – 我没有使用它们,但TeamViewer 非常快速。 这是相当活的。 我在命令提示符下运行了一个tree命令,并且延迟了20毫秒。 我可以在网上浏览网页,比我的笔记本电脑慢几毫秒。 在Visual Studio中垂直滚动代码有50 ms的延迟时间。 考虑一下TeamViewer的屏幕传输解决scheme必须具备的强大function。 VNC使用基于轮询的钩子检测屏幕变化,并在最差的情况下使用powershell屏幕捕获/比较。 在最好的情况下,他们使用像DFMirage这样的镜像驱动程序。 我在这个级别。 他们使用一种叫做RFB协议的东西。 微软Windows远程桌面显然比VNC高一步。 我从StackOverflow的某个地方听说,Windows远程桌面不会发送屏幕位图,而是实际的绘图命令。 这是相当出色的,因为它可以发送简单的文本(在这个坐标上绘制这个矩形,并用这个渐变来着色)! 远程桌面确实非常快 – 这是在家工作的标准方式。 它使用一种称为RDP协议的东西。 现在,TeamViewer对我来说是一个完整的秘密。 显然,他们发布了版本2的源代码(截至2012年2月,TeamViewer是第7版)。 人们已经读过它,并说版本2是无用的 – 这只是对自动穿越NAT的VNC的一些改进。 但版本7 …现在是很快的。 我的意思是,它实际上比Windows远程桌面更快。 我使用TeamViewer对DirectX 3D游戏进行了stream式处理(每秒1帧,但Windows远程桌面甚至不允许DirectX运行)。 顺便说一下,TeamViewer在没有镜像驱动程序的情况下执行所有操作。 有一个选项来安装一个,它只是快一点。 问题 我的问题是,TeamViewer如此之快? 这一定是不可能的。 如果你在24位深度上得到1920×1080的分辨率(16位深度会显着难看),那么仍然是6220800字节。 即使使用libjpeg-turbo(大公司使用的最快速的JPG压缩库之一),将其压缩到30KB(让我们非常慷慨),也需要一段时间才能通过TeamViewer的服务器(TeamViewer绕过企业对称NAT,只需通过代理他们的服务器)。 而libjpeg-turbo压缩需要时间来压缩。 高质量的JPG压缩需要175毫秒的完整1920 […]
由于TCP保证数据包传输,因此可以被认为是“可靠的”,而UDP不保证任何东西,数据包可能会丢失。 在应用程序中使用UDP而不是通过TCPstream传输数据的优点是什么? 在什么样的情况下UDP会是更好的select,为什么? 我假设UDP更快,因为它没有创build和维护stream的开销,但是如果一些数据永远不会到达目的地,那么这不是无关紧要的吗?
我有一个UDP套接字绑定到INADDR_ANY侦听我的服务器上的所有IP数据包。 我通过相同的套接字发送回复。 现在服务器自动select使用哪个IP作为发送数据包时的源IP,但我希望能够自己设置输出源IP。 有没有办法做到这一点,而不必为每个IP创build一个单独的套接字?