草庐IT

recv-Buffer

全部标签

linux - TCP 消息框架 + recv() [linux] : Good conventions?

我正在尝试在Linux上创建一个p2p应用程序,我希望它尽可能高效地运行。我遇到的问题是管理数据包。正如我们所知,recv()缓冲区中随时可能有多个数据包,因此需要某种消息框架系统来确保多个数据包不会被视为一个大数据包。所以目前我的数据包结构是:(u16intPacketLength):(PacketData)这需要调用两次recv();一种获取数据包大小,一种获取数据包。这有两个主要问题:1.Amaliciouspeercouldsendapacketwithasizeheaderofsomethinglarge,butnotsendanymoredata.Theapplicatio

c - nodejs从C接收到的buffer分为两部分

我正在使用tcp传输数据。服务端代码用C写,客户端代码用nodejs写。当我发送一个缓冲区时,有时客户端会收到这个缓冲区的两部分,console.log函数会触发两次,但有时效果很好。以下是nodejs代码和C代码。Node代码:varclient=newnet.Socket();client.on('data',function(data){console.log('data:',data)});C代码:send(socket_file,buffer,strlen(buffer),0) 最佳答案 这是典型的TCP,毕竟它是一个面向

C# 异步 TCP 套接字 : Handling buffer size and huge transfers

当使用阻塞TCP套接字时,我不必指定缓冲区大小。例如:using(varclient=newTcpClient()){client.Connect(ServerIp,ServerPort);using(reader=newBinaryReader(client.GetStream()))using(writer=newBinaryWriter(client.GetStream())){varbyteCount=reader.ReadInt32();reader.ReadBytes(byteCount);}}注意远程主机如何发送任意数量的字节。但是,当使用异步TCP套接字时,我需要创建一

c++ - 如何在 C++ 中使 recv() 函数超时?

我有一个在服务器上运行的程序与另一个在客户端上运行的程序通信。它们都来回发送数据和文件。我注意到每当有socHandler.read()(读取套接字上传入的数据的函数)时,它就会卡住等待数据到达。这就是函数的样子。intCSocHandler::read(char*inBuffer,INT64iBytesToRead){boolblReadMore=false;intretVal=0;intiOutputPointer=0;do{blReadMore=false;if(iStartOfBuffer==iEndOfBuffer){//Bufferemptyif(blClosed){ret

tcp - 如果接收到有效负载大小为 0 的有效 TCP 数据包,recv() 将返回什么值

在TCP套接字编程中,如果recv()返回0,则表示对方关闭了连接。但是,据我所知,TCPRFC并未强制要求TCP的有效载荷>0。因此,理论上,TCP堆栈可以接收有效载荷为0的消息。所以,基本上我的问题是,如果recv()收到一个有效负载大小为0的数据包,它会返回什么?如果它返回0,那么我们如何区分它与关闭连接指示。 最佳答案 有效负载大小为0的TCP段无处不在——它们几乎出现在现实世界中的每个TCP流中。每当一方希望确认收到另一方的数据但自己没有数据可发送时,就会发送它们。(这些通常被称为“ACK数据包”,但“ACK数据包”只是一

c - 处理多个 recv() 调用和所有可能的场景

我对C和编写TCP服务器相当陌生,想知道如何处理来自客户端的recv(),客户端将发送服务器将响应的命令。对于这个问题,我们只说header是第一个字节,命令标识符是第二个字节,有效负载长度是第三个字节,然后是有效负载(如果有的话)。recv()此数据的最佳方法是什么?我想调用recv()将前3个字节读入缓冲区,检查以确保header和命令标识符有效,然后检查有效负载长度并调用recv()再次使用有效负载长度作为长度并将其添加到上述缓冲区的后面。然而,阅读Beej的网络文章(特别是SonofDataEncapsulation部分),他建议使用“一个足够大的数组来容纳两个[最大长度]数据

c - 重复的 recv() 调用是否昂贵?

我有一个关于我经常遇到的情况的问题。有时我必须实现各种基于TCP的协议(protocol)。它们中的大多数都定义了以通用header([数据包ID、长度、有效载荷]或类似的东西)开头的可变长度数据包。显然,可以有两种方法来读取这些数据包:读取header(因为header长度通常是固定的),提取payload长度,读取payload读取所有可用数据并将其存储在缓冲区中;之后解析缓冲区显然,第一种方法很简单,但需要调用两次read()(或可能更多次)。第二种稍微复杂一些,但调用次数较少。问题是:第一种方法对性能的影响是否严重到足以担心它? 最佳答案

c - 对 send() 的多次调用合并为对 recv() 的一次调用

我有一个客户端-服务器应用程序。客户端使用两个不同的send()调用发送一个字符串后跟一个整数。这两个数据应该存储在服务器上的两个不同变量中。问题是发送的两个变量都在recv()调用中收到。因此,两个不同的send()发送的两个字符串被链接起来并存储在第一个recv()的缓冲区中。服务器.c:printf("Incomingconnectionfromclient%s:%iaccepted\n",inet_ntoa(clientSocketAddress.sin_addr),ntohs(clientSocketAddress.sin_port));memset(buffer,0,siz

C 套接字 : does send wait for recv to end?

我在Windows上使用阻塞式C套接字。我使用它们将数据更新从服务器发送到客户端,反之亦然。我以高频率(每100毫秒)发送更新。send()函数是否会等待接收方recv()接收到数据才结束?如果我很好地理解手册页,我假设不会:"Successfulcompletionofsend()doesnotguaranteedeliveryofthemessage."那么如果一个正在运行10次send()而另一个只完成1次recv()会发生什么?我需要使用某种确认系统吗? 最佳答案 让我们假设您正在使用TCP。当您调用发送时,您正在发送的数据

swift - ARSCNView 在 iOS 12 上因 GPU 错误 "Execution of the command buffer was aborted... (IOAF code 5)"而滞后

我不确定什么代码与此处发布相关,但我真的只是想知道如何调试它。我显示了一个启用了ARFaceTrackingConfiguration的ARSCNView,并在后台线程上对面部几何执行频繁的VisionVNDetectFaceLandmarksRequest和ARSCNView.hitTest。我在iOS12之前没有延迟问题,即使现在它只是间歇性的,但是当它发生时它会一次卡住整个屏幕几秒钟并显示错误:命令缓冲区的执行由于执行期间的错误而中止。丢弃(GPU错误/恢复的受害者)(IOAF代码5)不确定是否相关,但我也偶尔会在SceneKit渲染线程(com.apple.scenekit.s