软考-套接字(scoket)

Socket

Socket套接字:是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。

  • 将OSI模型中从传输层到物理层封装起来的抽象层,把网络协议隐藏在Socket抽象层中,只对使用者暴露API接口,使用者只需要考虑应用层数据即可。

TCP

UDP

有连接

无连接

可靠传输

不可靠传输

面向字节流

面向数据报

全双工

全双工

1️⃣基于TCP协议的套接字

软考-套接字(scoket)_第1张图片

创建套接字对象

socket.socket(family, type, proto)

参数

family:套接字家族,AF_UNIX (同一台主机上不同进程之间的文件传输) 和 AF_INET (网络通信);

type:套接字类型,数据流协议SOCK_STREAM 和 数据报协议SOCK_DGRAM;

protocol:一般不填,默认为0。

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

服务端

bind() 绑定地址;

listen() 监听TCP客户端的连接请求(将连接请求放入半连接池中),参数为半连接池的容量,至少为1,一般为5;

accept() 以阻塞的方式等待并被动接受客户端连接(从半连接池中取出一个客户端连接请求并建立连接)。

客户端

connect() 主动申请服务器连接,参数一般为元组 (hostname, port)。

服务端accept()从半连接池中取出客户端连接请求,与客户端connect()进行三次握手。

公共方法

recv() 接收数据,以字符串形式返回,参数为指定的接收最大数据量;

send() 发送数据,返回值是发送数据的字节数;

close() 关闭套接字。

会引发明显阻塞的操作是 accept() 和 recv()。

  • 两个循环

客户端需要循环做的事情

不停地从半连接池中取出一个连接请求,并建立连接;

基于建成的连接与客服端进行通信。

你可能感兴趣的:(软考,网络,服务器,linux)