在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这里描述下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()阻塞
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论