草庐IT

缓冲池

全部标签

c++ - Mat 的 tcp 发送缓冲区错误

我正在尝试通过TCP发送Mat图像。首先将Mat转换为uchar,然后转换为char格式。char格式的整张图像将逐个缓冲区发送出去,缓冲区大小为1024字节。以下是我的代码。MatdecodeImg=imdecode(Mat(bufferFrame),1);uchar*transferImg=decodeImg.data;char*charImg=(char*)transferImg;intlength=strlen(charImg);intoffset=0;while(true){bzero(bufferSend,BUFFER_SIZE);if(offset+BUFFER_SIZE

linux - 设置不同的发送和接收内核缓冲区大小

在连接的两端为发送和接收缓冲区设置不同的值有什么缺点(或优点)?保持这些值相同似乎最有意义(也是规范)。但是,如果一方(比如发送方)有资源将其缓冲区大小加倍,这会产生什么影响?我想一个相关的问题是,设置大于要求的缓冲区大小有什么缺点?从我读过的内容来看,如果您的发送缓冲区较大,听起来您可能会溢出接收缓冲区。此外,似乎没有必要增加缓冲区大小,只要您的应用程序能够跟上负载并且可以处理最大大小的消息。这并不一定意味着您可以处理更多的数据吞吐量,因为您仍然受到相反端点的限制。这是正确的吗?有问题的具体内核设置如下:net.core.wmem_maxnet.core.rmem_max

sockets - 客户端和服务器的不同套接字缓冲区大小

我有一个问题:我们可以为客户端和服务器设置不同的套接字缓冲区大小吗?例如在服务器上将发送和接收缓冲区设置为2048,在客户端设置为13312会有任何问题(服务器缓冲区的大小小于客户端)?如果是,会出现什么问题? 最佳答案 我认为您是在询问应用程序中的缓冲区。操作系统使用的缓冲区是另一回事。在客户端和服务器端使用不同长度的缓冲区是合法的。实际上它必须是合法的,因为例如网络浏览器在网络服务器中没有信息缓冲区大小,网络服务器不知道客户端缓冲区。但是您必须记住,TCP是一种面向流的协议(protocol),它不保留消息边界。例如让客户端有一

javascript - NodeJS 缓冲不完整的 TCP 流数据

我正在尝试确定我的实时服务器上的TCPJSON流的问题。我发现,如果通过TCP(JSON格式)流式传输给我的数据太大,那么它就不会始终如一地进行解析。我必须流式传输几次才能成功。我使用的代码如下:socket.once('data',function(data){letchunk="";chunk+=data.toString();//Addstringontheendofthevariable'chunk'letd_index=chunk.indexOf(';');//Findthedelimiter//Whilelooptokeepgoinguntilnodelimitercanb

Python TCP 'Send' 套接字缓冲区大小

我想使用TCPPythonsocket模块发送/接收“部分”数据。我的接收服务器端socket设置为在单个recv调用中接收40字节的数据:whileTrue:data=connection.recv(40)ifnotdata:break...connection.close()我有一些示例数据~500字节长,转换为bytes对象,由“客户端”发送到“服务器”:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)...s.send(sample_data)虽然我只调用了一次send方法,但这是否意味着客户端一次发送40个字节的“sampl

c - tcp 缓冲区中的总数据包长度是否可以超过分配的缓冲区大小?

众所周知,getsockopt(sock,SOL_SOCKET,SO_SNDBUF,&opt_val,&opt_len);返回之前在setsockopt().(如man7tcp中所写:请注意,TCP实际上分配了请求缓冲区大小的两倍setsockopt(2)调用,因此后续的getsockopt(2)调用将不会返回与setsockopt(2)调用中请求的相同大小的缓冲区。TCP将额外空间用于管理目的和内部内核结构,)所以如果我执行setsockopt(sock,SOL_SOCKET,SO_SNDBUF,(int*)&buf_size,sizeof(buf_size))forbuf_size

c - 如果客户端发送多个缓冲区而没有休眠,为什么 tcp 服务器会收到一个缓冲区?

如果我在一段时间后发送缓冲区,我的客户端将正确地发送到服务器。但是,如果我在没有间隔的情况下发送消息,服务器会收到一个缓冲区。例如,如果我发送两个缓冲区“message1”和“message2”,并在这两个发送操作之间放置1秒sleep,服务器会收到2个缓冲区并打印message1“\n”message2。但是,如果我在没有sleep的情况下发送这2个缓冲区,服务器将获得1个缓冲区并打印message1message2。我不明白为什么会这样。我的服务器和客户端代码如下。服务器.c#include#include//strlen#include//strlen#include#inclu

C# 如何手动清除 TCP 套接字缓冲区?

我正在编写一个TCP服务器来打开一个端口并与一些只将字符串数据作为字节数组发送的硬件通信。环境在Unity中,所以我使用异步回调来避免阻塞程序。这似乎工作正常,连接有效,收到正确的数据,我可以向硬件发送消息,但套接字缓冲区永远不会清除。当我执行Socket.EndReceive(ar)时,数据只是堆积起来,不会清空。异步循环是如何工作的?我不明白为什么这段代码没有完成循环并清除缓冲区。我花了很多时间试图理解这个过程,但无法弄清楚为什么这段代码不起作用。protectedTcpListenerListenServer;protectedSocketSimNetSocket;protect

tcp - LwIP Netconn API + FreeRTOS TCP 客户端缓冲区问题

我一直在尝试在STM32F4DISCOVERY板中使用LwIP修改tcp服务器示例。我必须编写一个不一定必须回复服务器响应的发件人。例如,它可以以100毫秒的频率发送数据。首先TCP服务器的例子是这样的:staticvoidtcpecho_thread(void*arg){structnetconn*conn,*newconn;err_terr;LWIP_UNUSED_ARG(arg);/*Createanewconnectionidentifier.*/conn=netconn_new(NETCONN_TCP);if(conn!=NULL){/*Bindconnectiontowel

networking - 自定义 TCP 服务中缓冲区使用和调整的一些技巧是什么?

我最近一直在研究许多网络库和框架,例如libevent、libev、FacebookTornado和Concurrence(Python)。我在他们的实现中注意到的一件事是使用应用程序级别的每个客户端读/写缓冲区(例如Tornado中的IOStream)——甚至HAProxy也有这样的缓冲区。除了这些应用程序级缓冲区之外,还有操作系统内核TCP实现的每个套接字缓冲区。我可以理解应用程序/库对读取缓冲区的使用,我认为:应用程序/库从内核缓冲区读取到应用程序缓冲区,然后应用程序对数据执行某些操作(例如反序列化其中的消息)。但是,我对写缓冲区的需要/使用感到困惑。为什么不只写入内核的发送/写