首页 > 编程语言 >socket 编程发送和接收缓存大小匹配问题

socket 编程发送和接收缓存大小匹配问题

时间:2023-09-27 11:58:10浏览次数:38  
标签:缓存 socket 编程 server 发送 接收 buf 500

socket 编程中有发送、接收缓存的情况:

例如服务器向客户端发送:

105     char server_buf[BUF_SIZE] = {0};

123         if(strncmp(server_buf, "exit", 4) != 0)
124         {
125             printf("Server got:%s\n", server_buf);
126             //将得到的字符串传给所有连接的客户端
127             for(i=0; i<cnt; i++)
128             {
129                 //write(cnt_fd[i], server_buf, sizeof(server_buf)); //测试错误,接收方BUF_SIZE为50时会接受11次
130                 write(cnt_fd[i], server_buf, strlen(server_buf));   //测试正确可行
131                 //send(cnt_fd[i], server_buf, strlen(server_buf), 0);//测试正确可行
132             }
133         }

 客户端从服务器接收:

89     char server_buf[BUF_SIZE];
 90     while(1)
 91     {
 92         ret = recv(skt_fd, server_buf, sizeof(server_buf), 0);//接收 BUF_SIZE 大小缓存的数据
 93         if(ret < 0)
 94         {
 95             perror("recv/read failed!");
 96             exit(-1);
 97         }
 98         else
 99         {
100             printf("Client rcv:%s\n", server_buf);
101         }
102     }

 

如果发送、接收缓存大小不一致,可能出现多次接收的问题。

以一个例子表示:

发送缓存大小 接收缓存大小 结果
500   500   正常(接收1次)
500   50   会接收10次,结果可能不太正常
50   500   正常(接收1次)

也就是说,如果要确保发送&接收正常(一次发送一次接收),就要让接收缓存大小 >= 发送缓存大小。

标签:缓存,socket,编程,server,发送,接收,buf,500
From: https://www.cnblogs.com/FBsharl/p/17732353.html

相关文章

  • 面向对象编程的六大原则个人总结(附代码)
    面向对象编程的六大原则个人总结(附代码)目录面向对象编程的六大原则个人总结(附代码)一、什么是单一职责原则?核心思想好处代码示例总结二、什么是里式替换原则?规则代码示例总结三、什么是迪米特法则?核心思想规则代码示例总结四、什么是开闭原则?理解代码示例总结五、什么是依赖倒......
  • C# BeginInvoke实现异步编程
    C#BeginInvoke实现异步编程-CSDN博客https://blog.csdn.net/Nire_Yeyu/article/details/133203267 C#BeginInvoke实现异步编程BeginInvoke实现异步编程的三种模式:1.等待模式在发起了异步方法以及做了一些其他处理之后,原始线程就中断并且等异步方法完成之后再继续;eg:usingS......
  • 真·Redis缓存优化—97%的优化率你见过嘛?
    本文通过一封618前的R2M(公司内部缓存组件,可以认为等同于Redis)告警,由浅入深的分析了该告警的直接原因与根本原因,并根据原因提出相应的解决方法,希望能够给大家在排查类似问题时提供相应的思路。一、问题排查1.1邮件告警正值618值班前夕,某天收到了邮件告警,告警内容如下:您好,R2......
  • 《Java编程思想第四版》学习笔记31--关于Externalizable
    //:Blip3.java//Reconstructinganexternalizableobjectimportjava.io.*;importjava.util.*;classBlip3implementsExternalizable{inti;Strings;//NoinitializationpublicBlip3(){System.out.println("Blip3Constructor");//s,inoti......
  • vite_vite.config.js配置代理与websocket代理
    exportdefaultdefineConfig({server:{proxy:{"/proxy":{target:"http://121.10.140.87",//线上服务器IP地址changeOrigin:true,ws:true,rewrite:(p......
  • 掌握嵌入式Linux编程3引导程序
    3引导程序引导程序是嵌入式Linux的第二个要素。它是启动系统和加载操作系统内核的部分。在这一章中,我们将研究引导程序的作用,特别是它如何使用一种叫做设备树的数据结构将控制权从自身传递给内核,设备树也被称为扁平化设备树或FDT(flatteneddevicetree)。我将介绍设备树的基本知......
  • Win32编程之远程注入(十七)
    一、VirtualAllocEx函数VirtualAllocEx 用于在另一个进程的虚拟地址空间中分配内存。这个函数通常与其他进程间内存操作函数一起使用,允许一个进程分配内存并将其映射到另一个进程的地址空间中。函数原型:LPVOIDVirtualAllocEx(HANDLEhProcess,LPVOIDlpAddress,SIZ......
  • hibernate缓存相关
    hibernate缓存相关hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。二级缓存是SessionFactory级别的全局缓存,它底下可以使用不同的缓存类库,比如ehcache、oscache等,需......
  • hibernate缓存总结
    hibernate缓存总结:缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能.Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理......
  • 多阅读编程语言语言的官方文档及一些源码
    1官方文档回顾了下自己这几年的学习历程,关于编程语言官方文档的学习很少很少,平时喜欢去看各种公众号文章和网站教程,自己的python基础以及一些框架基础就是就是在公众号、网站教程、博客和书上学来的。现在看看官方文档的那些海量的内容,自己都觉得很惊奇,很少看过不说,有些地方自己......