socket常用功能函数:
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) #创建socket对象
socket families(地址簇):
AF_UNIX —————————— unix本机之间进行通信
AF_INET —————————— 使用IPv4
AF_INET6 —————————— 使用IPv6
注:socket.socket()中第一个能使用上述值。
socket types:
SOCK_STREAM # TCP套接字类型
SOCK_DGRAM # UDP套接字类型
SOCK_RAW #原始套接字类型,这个套接字比较强大,创建这种套接字可以监听网卡上的所有数据帧
SOCK_RDM #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
注:这些常量都是套接字类型,应用于socket()
函数中的第二个参数中.根据系统的不同,可能有更多的常数。(只有SOCK_STREAM
和SOCK_DGRAM
似乎通常很有用。)
协议号通常为零,可以省略,或者在地址族为AF_CAN
的情况下,协议应为CAN_RAW
或CAN_BCM
。如果指定fileno,则忽略其他参数,从而导致具有指定文件描述器的套接字返回。与socket.fromfd()
不同,fileno将返回相同的套接字,而不是重复。这可能有助于使用socket.close()
关闭分离的套接字,一般情况下后两个参数忽略即可。
socket.bind(address) #将socket绑定到地址(常用于服务端)
address地址的格式取决于地址族, 在AF_INET下,以元组(host,port)的形式表示地址。
socket.listen([backlog]) #启用服务器以接受连接(常用于服务端)。
backlog >=0,指定系统在拒绝新连接之前将允许的未接受连接的数量。如果未指定,则选择默认的合理值。
socket.accept() #接收一个连接.该socket 必须要绑定一个地址和监听连接.返回值是一对(conn,address)。(常用于服务端)
conn是socket对象,可以在该连接上发送和接收数据,address是连接另一端的地址。
socket.recv(bufsize[, flags]) #从socket接收数据,返回值是一个代表所收到的数据的字节对象。
一次性接收的最大数据量由bufsize指定, 参数flags通常忽略。
socket.send(data[, flags]) #将数据发送到socket。
python3中只能发送bytes类型的数据。
socket.connect(address) #连接到远程socket(常用于客户端)
如果连接被信号中断,则该方法等待直到连接完成,或者如果信号处理程序没有引发异常并且套接字正在阻塞或者已经阻塞,则在超时时引入socket.timeout
超时。对于非阻塞套接字,如果连接被信号中断(或由信号处理程序引发的异常),则该方法引发InterruptedError
异常。
socket.close() #关闭socket
注:被调用后,连接断开,socket不能在发送数据,连接另一端也将不在接收数据。