c++之socket,阻塞模式
这里描述下socket的阻塞模式:
首先,socket有几个函数
socket() 创建socket
bind() 绑定socket到一个地址
listen() 开启soket监听
accept() 接受别人来连接我,这个是个阻塞函数,一般服务器调用。
recv() 接受对方发过来的消息,这个也是阻塞函数,因为TCP要等对方把消息传递完整后再执行把消息从buff里面copy过来。这个客户端和服务器都要调用,注意~!!!!!
send() 发送消息
connect() 连接socket,一般是客户端。
上面accept和recv都是阻塞函数,要注意!!!
举例:
1、server开启后,会阻塞在accetp函数,等待别人连接。
2、client 1 开启connect ,然后立即返回,继续执行客户端的代码。此刻,server收到请求,继续执行server代码,一般连接成功后写recv函数,所以server阻塞在recv。
3、client
time client 1 client 2 server
1 accept,阻塞
2 connect后立即返回
3 收到client 1的con
4 执行recv,阻塞
5 connect
6 (收到client 2的连接,但是程序阻塞,所以排入队列)
7 send("c2")
8 (收到client 2的数据,但是程序阻塞,所以排入队列)
9 recv(),阻塞
10 send("c1"), 并recv()阻塞
11 收到client 1的数据c1,并send("hello c1 , im server")
12 收到数据("hello c1 , im server")通信完成
13 server执行完11步骤后,立即查看队列还有一个没处理,所以处理c2的连接,收到数据"c2",发送(“"hello c2 , im server"”)
14 收到数据(“"hello c2 , im server"”)通信完成
15 accept()阻塞
c++之socket,阻塞模式的更多相关文章
- Socket 阻塞模式和非阻塞模式
阻塞I/O模型: 简介:进程会一直阻塞,直到数据拷贝 完成 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返 ...
- Socket阻塞模式和非阻塞模式的区别
简单点说: 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系 ...
- Python Socket单线程+阻塞模式
Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要: 前面第五篇(一)中的一个Socket例子其实就是 ...
- UDP socket 设置为的非阻塞模式
UDP socket 设置为的非阻塞模式 Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), MSG_DONTWAIT, (struct so ...
- socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto
socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ...
- NIO Socket非阻塞模式
NIO主要原理和适用 NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有 事件发生时,他会通知我们 ...
- 看到关于socket非阻塞模式设置方式记录一下。
关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的:我打个很简单的比方,如果你调用socket send函数时: 如果是阻塞模式下: send先比较待发送数据的长度len和套接 ...
- socket缓冲区以及阻塞模式
socket缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区. write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从 ...
- 服务器编程心得(四)—— 如何将socket设置为非阻塞模式
1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket( _In_ int af, _In_ ...
随机推荐
- [ActionScript 3.0] AS3.0 简单封装Socket的通信
Socket服务器 package com.controls.socket { import com.models.events.AppEvent; import com.models.events. ...
- C++引用与指针
在做函数参数时, 引用不可以设置默认值, 指针可以 void fun(const string& url, string* domain = NULL); 另const放在函数后面, 表示这 ...
- eclipse与myeclipse恢复已删除的文件和代码
1.类文件的恢复 选择项目后右键-->选择Restore from Local history-->出现下面的界面: 勾选后按Restore就恢复了,真的很强大很方便:但我没有就此罢手,我 ...
- 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)
Java time JavaScript Math.round(new Date().getTime()/1000)getTime()返回数值的单位是毫秒 Microsoft .NET / C# ep ...
- 使用Synplify综合时保留logic
在使用Synplify综合时,此工具会自动优化我的设计. 当然此功能有好有坏,最近有个项目需要使用Chipscope观察内部信号,打开inserter就懵了,信号列表中我的设计有的是名字被改了,有的是 ...
- android自定义圆形图片和遇到的问题
画圆遇到的问题:图片单位不一样,导致图片只能显示出圆的一部分:看代码: public class MyCircleIamge extends ImageView { private Context c ...
- Java项目导出war包 security alert:integrity check error”
操作方法: 首先下载这个jar包 http://pan.baidu.com/s/1sk5uDzf 1.需要先把common/pluns 下的com.genuitec.eclipse.export.wi ...
- ASP.NET Web API系列教程目录
ASP.NET Web API系列教程目录 Introduction:What's This New Web API?引子:新的Web API是什么? Chapter 1: Getting Start ...
- 【Django】Django model与数据库操作对应关系(转)
Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...
- Ubuntu mongodb 安装和配置
安装 MongoDB sudo apt-get install mongodb sudo apt-get install mongodb 关闭/启动 sudo service mongodb stop ...