首页 > 其他分享 >socket之send和recv原理剖析

socket之send和recv原理剖析

时间:2023-08-12 19:23:02浏览次数:39  
标签:socket 发送缓冲区 send 网卡 接收缓冲区 发送数据 接收数据 recv

TCP socket的发送和接收缓冲区

当创建一个TCP socket对象的时候会有一个发送缓冲区和一个接收缓冲区,这个发送和接收缓冲区指的就是内存中的一片空间。

 

send或sendall方法是不是直接把数据发给服务端?

不是,要想发数据,必须得通过网卡发送数据,应用程序是无法直接通过网卡发送数据的,它需要调用操作系统接口,也就是说,应用程序把发送的数据先写入到发送缓冲区(内存中的一片空间),再由操作系统控制网卡把发送缓冲区的数据发送给服务端网卡

 

recv是不是直接从客户端接收数据?

不是,应用软件是无法直接通过网卡接收数据的,它需要调用操作系统接口,由操作系统通过网卡接收数据,把接收的数据写入到接收缓冲区(内存中的一片空间),应用程序再从接收缓存区获取客户端发送的数据

发送和接收数据的原理图

 

发送数据是发送到发送缓冲区,接收数据是从接收缓冲区

 

标签:socket,发送缓冲区,send,网卡,接收缓冲区,发送数据,接收数据,recv
From: https://www.cnblogs.com/allenxx/p/17625292.html

相关文章

  • 当打开百度,定位输入报错怎么解决driver.find_element_by_id('kw').send_keys("seleniu
    报错如下: 解决方案,改变编写方式,引入fromselenium.webdriver.common.byimportBy  源码:例子说明: 打开百度,输入selenium进行搜索。fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome()d......
  • WebSocket
    在搭建聊天室时,选择使用TCP请求而不是HTTP请求是因为TCP(传输控制协议)和HTTP(超文本传输协议)具有不同的特性,适用于不同的场景。以下是选择TCP请求而不是HTTP请求的一些原因:即时性:TCP是一种面向连接的协议,它在客户端和服务器之间建立稳定的双向通信通道。这种连接可以保持长时间,使......
  • Socket客户端实现
    1importsocket#1.导入内置的socket模块23#2.创建Socket对象4client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)56#3.连接服务器7server_address=('localhost',18080)8client_socket.connect(server_address)910try:1......
  • .net core Fleck WebSocket使用笔记
    @@.netcoreFleck socket帮助类usingFleck;usingKOTL_EvidenceService.Model;usingSystem;usingSystem.Collections.Generic;namespaceKOTL_EvidenceService.Util{publicclassServerHelper{WebSocketS......
  • c#--Fleck WebSocket使用 (C#版Websocket实例)
    -->https://blog.csdn.net/qq_40580931/article/details/120781798 推荐几篇文章:WebSocket实战C#版Websocket实例C#工作总结(一):Fleck的WebSocket使用1.服务端代码usingFleck;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;namespaceWebSocketTes......
  • XMLHttpRequest发送请求报错:Failed to execute 'send' on 'XMLHttpRequest': Failed t
    1、问题源:url:http://localhost:8099/api/testconstxhr=newXMLHttpRequest();xhr.open('post',url,false);xhr.setRequestHeader("Content-type","application/json");varstr=JSON.stringify(uid)xhr.send(str);......
  • 使用 WebSockets、React 和 TypeScript 构建实时投票应用程序
    长话短说WebSocket允许您的应用程序具有“实时”功能,其中更新是即时的,因为它们是在开放的双向通道上传递的。这与CRUD应用程序不同,CRUD应用程序通常使用HTTP请求,必须建立连接、发送请求、接收响应,然后关闭连接。要在React应用程序中使用WebSockets,您需要一个专用服务器,例......
  • java之Socket通信,Socket服务端返回数据,基本数据类型占用字节数。
    参考:https://blog.csdn.net/qq_43842093/article/details/129964892https://blog.csdn.net/weixin_42408447/article/details/126437276数据类型占用字节数://Java一共有8种基本数据类型://1、int占4字节,取值范围为“-2147483648~2147483647”;//2、short占2字节,......
  • C# 使用TouchSocket实现Tcp协议通讯,并且解决分包、粘包的问题
    我们知道如果Socket传输数据太频繁并且数据量级比较大,就很容易出现分包(一个包的内容分成了两份)、粘包(前一个包的内容分成了两份,其中一份连着下一个包的内容)的情况。粘包的处理方式有很多种,常见的三种是:每个包都在头部增加一个当前传输包的int4字节大小作为包头。每次接收到数据......
  • HandlerSocket的perl接口操作方法
    实例化:/*   *String $host:MySQLip;  *String $port:handlersocket插件的监听端口,它有两个端口可选:一个用于读、一个用于写   */ $hs=newHandlerSocket($host,$port);运用例子:#9998为读取端口详见上一篇handlersocket的安装my$args={host=>'loca......