python的socket连接编程
创建socket对象
在使用socket之前,必须先创建 socket 对象
1 | socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) |
前2个参数比较重要,其中:
family
参数用于指定网络类型。该参数支持socket.AF_UNIX
(UNIX 网络)、socket.AF_INET
(基于 IPv4 协议的网络)和socket.AF_INET6
(基于 IPv6 协议的网络)这三个常量。type
参数用于指定网络 Sock 类型。该参数可支持SOCK_STREAM
(默认值,创建基于 TCP 协议的 socket)、SOCK_DGRAM
(创建基于 UDP 协议的 socket)和SOCK_RAW
(创建原始 socket)。一般常用的是SOCK_STREAM
和SOCK_DGRAM
。
socket 对象提供了如下常用方法:
socket.accept()
:作为服务器端使用的 socket 调用该方法接收来自客户端的连接。socket.bind(address)
:作为服务器端使用的 socket 调用该方法,将该 socket 绑定到指定 address,该 address 可以是一个元组,包含 IP 地址和端口。socket.close()
:关闭连接,回收资源。socket.connect(address)
:作为客户端使用的 socket 调用该方法连接远程服务器。socket.connect_ex(address)
:该方法与上一个方法的功能大致相同,只是当程序出错时,该方法不会抛出异常,而是返回一个错误标识符。socket.listen([backlog])
:作为服务器端使用的 socket 调用该方法进行监听。socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None, newline=None)
:创建一个和该 socket 关联的文件对象。socket.recv(bufsize[, flags])
:接收socket 中的数据。该方法返回 bytes 对象代表接收到的数据。socket.recvfrom(bufsize[,flags])
:该方法与上一个方法的功能大致相同,只是该方法的返回值是 (bytes, address) 元组。socket.recvmsg(bufsize[, ancbufsize[, flags]])
:该方法不仅接收来自 socket 的数据,还接收来自 socket 的辅助数据,因此该方法的返回值是一个长度为 4 的元组 (data, ancdata, msg_flags, address),其中 ancdata 代表辅助数据。socket.recvmsg_into(buffers[, ancbufsize[, flags]])
:类似于 socket.recvmsg() 方法,但该方法将接收到的数据放入 buffers 中。socket.recvfrom_into(buffer[, nbytes[, flags]])
:类似于 socket.recvfrom() 方法,但该方法将接收到的数据放入 buffer 中。socket.recv_into(buffer[, nbytes[, flags]])
:类似于 recv() 方法,但该方法将接收到的数据放入 buffer 中。socket.send(bytes[, flags])
:向socket 发送数据,该 socket 必须与远程 socket 建立了连接。该方法通常用于在基于 TCP 协议的网络中发送数据。socket.sendto(bytes, address)
:向 socket 发送数据,该 socket 应该没有与远程 socket 建立连接。该方法通常用于在基于 UDP 协议的网络中发送数据。socket.sendfile(file, offset=0, count=None)
:将整个文件内容都发送出去,直到遇到文件的 EOF。socket.shutdown(how)
:关闭连接。其中 how 用于设置关闭方式。
TCP
Server
1 | # 导入 socket 模块 |
Client
1 | # 导入socket模块 |
UDP
Client
1 | # 1、导入模块 |
Server
1 | # 1、导入模块 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Triority's blog!
评论