socket模块
socket模块主要对象和方法
- 通过socket.socket()函数来创建 套接字对象:
s = socket.socket(family=AF_INET, type=SOCK_STREAM)
socket.socket()函数参数:
摘自:Python文档 创建套接字
参数 |
说明 |
family |
地址簇:AF_INET (默认)、AF_INET6、AF_UNIX、AF_CAN、AF_PACKET 或 AF_RDS |
type |
套接字类型: SOCK_STREAM (默认)、SOCK_DGRAM、SOCK_RAW 或其他 SOCK_ 常量之一 |
proto |
协议号通常为零,可以省略,或者在地址簇为 AF_CAN 的情况下,协议号应为 CAN_RAW、CAN_BCM 或 CAN_ISOTP 之一 |
fileno |
如果指定了 fileno,那么将从这一指定的文件描述符中自动检测 family、type 和 proto 的值。如果调用本函数时显式指定了 family、type 或 proto 参数,可以覆盖自动检测的值。 |
- 将套接字绑定到 address:
s.bind(address=("127.0.0.1",9898))
参数 |
说明 |
address |
address 的格式取决于地址簇 |
- 启动一个服务器用于接受连接:
s.listen(5)
- 接受一个连接:
conn, addr = s.accept()
socket.accept()方法返回值说明:
返回值 |
说明 |
conn |
是一个新的套接字对象,请使用该套接字对象在连接上收发数据 |
address |
连接另一端的套接字所绑定的地址,客户端的 address tuple类型(IP,PORT) |
- 连接到 address 处的远程套接字:
s.connect(("127.0.0.1",9898))
- 如果需要接收多个客户端的连接请求,那么每个连接都需要开启新的进程或者是线程
- 从套接字接收数据的方法:
data_bytes = conn.recv(1024)
data_bytes, addr = conn.recvfrom(1024)
更多接收数据的方法 参考 Python文档
- 发送数据给套接字:
conn.send(b'Hi!')
conn.send(str("msg").encode("utf-8")