2 qq 25369215 qq_25369215 于 2017.08.28 19:44 提问

QT socket接收端每一次接收缓冲区数据的延时问题。

我想实现局域网视频传输功能,客户端通过调用摄像头将每一帧画面传送到服务器端,服务器端将获致的画面显示出来,客户端是在Linux系统上,服务器端是在Windows系统上。在客户端中我的QSocket类对象调用write()发送数据流,服务器端readyread()信号关联的槽函数中用readAll()来读取缓冲区中的数据流,但是在读取数据的时候,我发现每一次读取数据后会有几毫秒的延时才会继续读取后来的数据,并且缓冲区每次也只有3472个字节的数据可读取,我的每帧画面大概有300多K,所以正因为这种延时我在客户端发送每帧画面的频率不能过快,大概只能一秒一帧才会正常显示画面。这个问题困扰我很长时间了,我应该怎样处理这种问题???????

补充,从windows上发送数据给Linux不会有上述问题,视频很流畅。

1个回答

jklinux
jklinux   2017.08.31 09:56

要提速可以把视频数据编码压缩过后再发,同时设置socket的bufferSize为大点

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系
一个例子明白发送缓冲区、接受缓冲区、滑动窗口协议之间的关系。 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例子,由于对于每一个TCP的SOCKET来说,都有一个发送缓冲区和接受缓冲区与之对应,所以这里只做单方向交流,不做互动,在recv端不send,在send端不recv。细细揣摩其中的含义。 一、recv端
TCP的接收缓冲区满了,收到数据后会向发送方发送ACK吗?该怎么解决
TCP的接收缓冲区满了,收到数据后会向发送方发送ACK吗? TCP的发送缓冲区中的数据,如果收不到接收方的ACK就不会删除,导致发送缓冲区溢出。如果接收方的缓冲区满了,收到数据后会不会向发送方发ACK呢?如果不发ACK,那么就没有接收缓冲区溢出的概念了,只要控制住发送方,就不会丢包;如果发ACK,那发送方就没办法控制是否继续发送了,接收缓冲区就会造成溢出,导致丢包。事实是怎样的呢?我这样理解正确
UDP接收端缓冲区和丢包问题
实习项目需要用Winsock内核模式驱动提供的sockets方法,,这个驱动负责连接和缓冲管理,对应用程序提供socket风格的编程接口。 大概的流程是发送端将一幅图像分成多个包进行发送,接收端接收包整合成图像并显示。 通过测试发现,发送端是相机,采用udp协议,发送的图像数据包有3428个,并且通过wireshark抓取到全部的包,但是接收端只能接收到3000个包左右,出现了丢包
如何获取/设置socket对应的内核缓冲区(发送,接收)的大小
前面我们讲过内核缓冲区和应用程序缓冲区, 在本文中, 我们仅仅讨论内核缓冲区, 下面, 我们来看程序: #include #include #pragma comment(lib, "ws2_32.lib") int main() { WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(1, 1)
设置SOCKET的发送与接收缓冲区
主  题: 浅析:setsockopt()改善程序的健壮性 作  者: gdy119 (夜风微凉) 不断的收到coolmei25 (梅生)的答谢,我都不好意思了(我都没帮到他),下面 写出我在网络编程中的一点心得体会,希望对他(^_^也对大家)有帮助: 1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用 closesocket(一
socket的发送和接收缓冲区
对于每一个TCP的SOCKET来说,都有一个发送缓冲区和接受缓冲区与之对应,下面举个例子说说发送缓冲区、接受缓冲区、滑动窗口协议之间的关系。 一、recv端     在监听套接字上准备accept,在accept结束以后不做什么操作,直接sleep很久,也就是在recv端并不做接收数据的操作,在sleep结束之后再recv数据。 二、send端     通过查看本系统内
设置SOCKET的发送与接收缓冲区 .
2011-01-18 10:55 2555人阅读 评论(1) 收藏 举报 主  题: 浅析:setsockopt()改善程序的健壮性 作  者: gdy119 (夜风微凉) 不断的收到coolmei25 (梅生)的答谢,我都不好意思了(我都没帮到他),下面 写出我在网络编程中的一点心得体会,希望对他(^_^也对大家)有帮助: 1. 如果在已经处于 ESTABL
TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
在有关TCP连接的很多配置中,有很多选项有的配置  net.ipv4.tcp_rmem:这个参数定义了TCP接收缓冲(用于TCP接收滑动窗口)的最小值、默认值、最大值 net.ipv4.tcp_wmem:这个参数定义了TCP发送缓冲(用于TCP发送滑动窗口)的最小值、默认值、最大值 netdev_max_backlog:当网卡接收数据包的速度大于内核处理的速度时,会有一个队列
Qt套接字缓冲区数据如何清空?
readAll( )
清空接收缓冲区和发送缓冲区的数据函数
(1)调用SerialPort.DiscardInBuffer 方法可以清空串行驱动程序的接收缓冲区的数据。 此方法等效于 Visual Basic 6.0 代码:MSComm1.InBufferCount = 0 (2)调用SerialPort.DiscardOutBuffer 方法可以清空串行驱动程序的发送缓冲区的数据。 此方法等效于 Visual Basic 6.0 代码:MSComm1.O