Skip to content
This repository was archived by the owner on May 26, 2022. It is now read-only.

Latest commit

 

History

83 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

socket

基于 C++ 的 socket 编程。目前仅有 Linux 版,Windows 版不在计划中。

数据的“粘包”问题:由于缓冲区和阻塞模式的存在,read 读取缓冲区的时候并不是说缓冲区一有数据就读取,而是阻塞等待到缓冲区快满了的时候才去读取缓冲区的数据(为了尽可能多的接收数据)。换句话说,我本来是分批次给你发消息,然而你以为我是连起来说的,或者认为我说话前言不搭后语。

例如,write()/send() 重复执行三次,每次都发送字符串"abc",那么目标机器上的 read()/recv() 可能分三次接收,每次都接收"abc";也可能分两次接收,第一次接收"abcab",第二次接收"cabc";也可能一次就接收到字符串"abcabcabc"。

服务端延迟 10s 再原样返回数据 且 客户端一下子发生好多条数据 的办法按照网站上的修改应该会出现“粘包”现象,然而它的结果既不是“粘包”也不是返回多条数据,而是只返回了一条数据。。

$ ./server
Buffer length = 16384
Message form client: 123 456 789 asdxc asd

$ ./client  # 客户端中有循环会连续发生 20 次数据,10s 后收到服务器返回的数据
Input a string: 123 456 789 asdxc asd
Message form server: 123 456 789 asdxc asd
Input a string: asd
Message form server: asd

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages