sockets - 通过套接字发送图像

标签 sockets networking

我有一个客户端服务器的想法。客户端只处理输入,将其发送到服务器。服务器处理输入、逻辑,然后将程序的图像发送给客户端。客户端在用户的屏幕上打印图像。使用 udp,图像中的轻微伪影是可以容忍的。

这些图像在互联网上的传播速度有多快?他们可以每秒至少旅行 5 次吗?我手头没有两台电脑来测试它。

编辑:还有一个问题 - UDP 协议(protocol)有多可靠?有多少像素会损坏?比如说,平均10%?

EDIT2:例如,我有一个 320x200 32 位图像(红色、绿色、蓝色 + alpha)。那是大约 200 万位。图片从服务器到达客户端需要多长时间,如果我的 ping 是 X,我的上传速度是 Y Mbps,我的下载速度是 Z Mbps?

最佳答案

您的问题的答案在很大程度上取决于所涉及机器的互联网连接。特别是,如果程序是大量图形化的,则图像使用的带宽可能相当大,尤其是当您的客户端在通过蜂窝电话系统连接的移动设备上时。

如果您有足够的带宽,如果客户端和服务器都在美国,或者两者都在欧洲,那么大多数时候应该可以实现每秒 5 次往返。例如,交互式计算机游戏依赖于每秒 4 到 5 次往返才能顺利进行,结果只是偶尔会出现故障。如果客户端和服务器位于不同的大陆,特别是如果它们位于世界的另一边,这可能会更加困难,因为光速延迟开始占用很大一部分可用传输时间。在最坏的情况下,比如在中国和阿根廷之间,仅理论光速延迟就将网络限制在每秒 8 次往返以下,因此在实际网络和带宽限制的情况下,每秒 5 次往返可能很难实现。

UDP 的可靠性很大程度上取决于连接的拥塞程度。在不拥塞的网络连接上,您可能会丢失 1% 或更少的数据包。在非常拥挤的网络连接上,情况可能会更糟——我见过 80% 的数据包丢失的情况。

在不拥塞的网络上,图像从服务器传输到客户端的时间为

(ping time)/2 + (1-packet overhead)*(image size)/(minimum bandwidth)

数据包开销只有百分之几,因此您可以删除该术语。最小带宽将是服务器上传带宽和客户端下载带宽的最小值。请注意,图像大小可能会通过压缩显着减小。但是不要忘记,您还需要留出时间将输入从客户端发送到服务器,这至少会增加另一个 (ping time)/2。

关于sockets - 通过套接字发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372700/

相关文章:

python - socket.gaierror : [Errno 11001] getaddrinfo failed"in python, 使用简单的自定义 Web 浏览器

sockets - Web 服务器如何避免 TIME_WAIT?

Python 3.8 TLSv1.3 套接字关闭导致 ConnectionResetError 或 ConnectionAbortedError

c# - 如何获取 SMPP 消息发送确认

python - str() 在这里代表什么?

vba - 如何分配前端与指向不同驱动器号的链接表

java - 使用 RSA 解密时收到错误

java - 如何让两台计算机用java相互通信以进行即时通讯?

networking - 为什么 UDP 和 TCP 使用端口号而不是 PID 来定位目标?

networking - TCP IP 保证传送问题