02_套接字编程(socket抽象层)

02_套接字编程(socket抽象层)[Python常见问题]

1.套接字概述

    1.套接概述: 套接是进行网络通信的一种手段(socket)

    2.套接字分类:
        流式套接字(SOCK_STREAM): 传输层基于tcp协议进行通信

        数据报套接字(SOCK_DEGAM): 传输层基于udp协议进行通信

        原始套接字(SOCK_RAW): 访问底层协议的套接字

    3.TCP与UDP通讯模型流程图: https://www.processon.com/view/link/5ef43bfd1e0853263742690b

    4.套接字属性和方法

import socket

s = socket.socket()  # 默认会创建流式套接字

# 功能: 获取套接字的描述符
# 描述符: 每一个IO操作系统都会分配一个不同的整数与之对应,该整数极为此IO操作的描述符
s.fileno()  # 12
print(s.fileon())  # 12

# 获取套接字类型
s.type  # <SocketKind.SOCK_STREAM: 1>
print(s.type)  # SocketKind.SOCK_STREAM

# 获取套接字绑定的地址
s.getsockname()  # ("0.0.0.0", 0)
s.bind(("127.0.0.1", 7890))
print(s.getsockname())  # ("127.0.0.1", 7890)

# 使用accept生成的套接字调用,获取该套接字对应的客户端的地址,在一个服务器有多个客户端连接时常会用到这个方法
s.listen(128)
conn, addr = s.accept()  # 阻塞时需要找一个用户连接
conn.getpeername()  # ("127.0.0.1", 53519)
print(conn.getpeername())  # ("127.0.0.1", 53519)

# s.setsockopt(level, optname, value) 设置套接字选项
# 参数 level: 定义的选项类型,常用选项(IPPROTO_TCP,IPPROTO_IP,SOL_SOCKET)
# 参数 optname: 根据level选项确定的子选项
# 参数 value: 根据子选项设置的值
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 设置端口重用
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)  # 设置套接字允许接收广播

# s.getsockopt(level, optname) 获取套接字选项
# 参数 level: 定义的选项类型,常用选项(IPPROTO_TCP,IPPROTO_IP,SOL_SOCKET)
# 参数 optname: 根据level选项确定的子选项
# 返回值: 返回根据子选项设置的值
s.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)  # 1

# 面向锁的套接字方法
s.setblocking()  # 设置套接字阻塞与非阻塞模式,参数默认为True表示阻塞
s.settimeout()  # 设置阻塞套接字操作的超时时间
s.gettimeout()  # 获取阻塞套接字操作的超时时间

# 面向文件的套接字函数
s.fileno()  # 套接字的文件描述符
s.makefile()  # 创建一个与该套接字相关的文件
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 02_套接字编程(socket抽象层)