socket套接字
socket是进程间通信方式的一种,其本意为“插座”,常被称为套接字。socket起源于Unix,在Unix和Linux中,socket被具象化为一种文件,当使用socket进行通讯时,进程会先生成一个socket文件,之后再通过socket文件进行数据传递。
Python有一个名为socket的模块,该模块包含了网络编程的类、方法、函数等。利用socket模块中的构造方法socket()可以创建一个socket对象,socket()方法的语法格式下:
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
关于socket()方法参数的相关介绍具体如下:
(1)参数family用于指定地址族,默认值为AF_INET,表示可用于地址为IPv4格式的进程间通信,也可以使用AF_INET6和AF_UNIX为family赋值:
AF_INET6:表示可用于地址为IPv6格式的进程间通信;
AF_UNIX:只能用于单一的Unix系统进程间通信。
(2)参数type用于指定socket的类型,该参数决定socket的通信方式,其取值及代表的含义分别如下:
SOCK_STREAM:type的默认值,表示流式套接字,用于TCP通信中;
SOCK_DGRAM:数据报式套接字,用于UDP通信中;
SOCK_RAW:原始套接字,用于处理ICMP、IGMP等网络报文,或需用户构造IP头部的通信中。
(3)参数proto用于指定与特定的地址家族相关的协议,其默认值为0,表示由系统根据地址格式和套接字类型自动选择合适的协议。
(4)参数fileno用于为套接字文件设置文件描述符,默认设置为None,表示由系统分配。
socket()的使用示例如下:
import socket
socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
使用以上的两条语句,分别可创建一个基于TCP通信的流式套接字socket_tcp和一个基于UDP协议的数据报式套接字socket_udp。socket()方法创建的套接字默认为一个主动套接字,当需要与其它进程通信时,该套接字应主动向目标进程发送数据。
网络通信中的程序通常分为服务器程序和客户端程序,这两种程序都会创建socket对象,但针对socket的操作流程各不相同。