zoukankan      html  css  js  c++  java
  • 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()阻塞

  • 相关阅读:
    linux定时器
    TIMESTAMP和DATETIME的区别
    Linux进程或线程绑定到CPU
    C++学习笔记
    磁盘扇区校验和
    docker安装mysql,并配置部分表同步
    docker 安装tomcat
    多tomcat 同一个浏览器 多个项目 会导致session覆盖
    Ubuntu 安装 NodeJS
    Ubuntu 下安装 Arduino IDE
  • 原文地址:https://www.cnblogs.com/alazalazalaz/p/5450962.html
Copyright © 2011-2022 走看看