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()阻塞

  • 相关阅读:
    J. 最大权边独立集 题解(树上背包)
    F. 地图压缩 题解(kmp 最小循环节)
    Sum of Log 题解(数位dp)
    F. Scalar Queries 题解(思维+线段树)
    B. 攻防演练 题解(思维+倍增)
    Bit Sequence 题解(数位dp)
    机器学习
    Android学习笔记
    sqoop
    Initialization failed for block pool Block pool
  • 原文地址:https://www.cnblogs.com/alazalazalaz/p/5450962.html
Copyright © 2011-2022 走看看