本文转载:https://xiaochuhe.blog.csdn.net/article/details/122684715
一、简介
功能:socket也叫套接字,主要用来实现网络中不通计算机之间的通信。
模块:两个模块,服务端模块和客户端模块
过程:当创建了一个服务器Socket之后,服务端Socket就会先在一个端口上等待连接,客户端socket访问这个端口,当两者完成连接后,就可以实现交互访问。
二、基本用法
(1)socket()实例化
语法格式:
Socket.scoket([family[,type[,proto]]]) protocol协议
参数:
Family:套接字家族可以使用AF_UNIX或者AF_INET(用的多,ip地址)
type:套接字类型,可以根据是面向连接的还是非面向连接的分为SCOK_STREAMZ或SOCK_DGRAM
protocol:一般不填,默认为0
例子:
如果希望初始化一个TCP类型的socket,可使用如下语句:
s =socket.socket()或者: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
初始化一个UDP类型的Socket,可使用如下语句:
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
(2 )Socket常用函数
s.bind(address)
将套接字绑定到地址,address 地址格式取决与地址簇,在AF_INET下,以元组(host,port)的形式表示地址。
s.listen(backlog)
开始监听传入连接,backlog指定在拒绝连接之前,可以挂起的最大连接数量。至少为1
比如:backlog = 5,表示内核已经接到了连接请求,但服务器还没有调用accpet进行处理的连接个数最大为5,这个值不能无限大,因为要在内核中维护连接队列。
s.setblocking(bool)
是否阻塞(默认True),如果设置成了False,当accept和recv没有数据时,会报错。
s.accept()
接收连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址,接收TCP客户的连接(阻塞)等待连接的到来。
s.connect(address)
连接address处的套接字,通常情况下,address格式为元组(hostname,port),如果连接出错,则返回socker.error错误。
s.connect_ex (address)
功能同上,不同的是有返回值,连接成功时返回0,反之则返回编码,如10061.
s.close()
关闭套接字
s.recv(bufsize[,flag])
接收套接字的数据,数据以字符串形式返回,bufsize指定最多可以接收的数量,flag提供有关消息的其他信息,可以忽略。
s.recvfrom(bufsize[,flag])
与recv()类似,但返回值是(data,address),其中data是接收数据的字符串,addres是发送数据的套接字地址
s.send(string[,flag])
将string中的数据发送到连接的套接字,返回值是要发送的字节数量,就该数量可能小于string的字节大小。即:可能未将指定内容全部发送。
s.sendall(string[,flag])
将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有的数据,成功返回None,失败则抛出异常。
s.sendto(string[,flag],address)
将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址,返回值是发送的字节数,该函数主要用于UDP协议。
s.settimeout(timeout)
设置套接字操作的超时期,timeout是浮点数,单位是秒,值为None表示没有超时期。
s.getpeername()
返回连接套接字的远程地址,返回值是元组(ipaddr,port)
s.getsockname()
返回套接字自己的地址,返回值是元组(ipaddr,port)
s.fileno()
套接字的文件描述符。