笔记来源:《Python核心编程(第3版)中文版》
套接字是计算机网络数据结构。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将
无法进行通信。
Python 只支持 AF_UNIX、 AF_NETLINK、 AF_TIPC 和 AF_INET 家族。
第二种类型的套接字是基于网络的,它也有自己的家族名字 AF_INET,或者地址家族:因特网。另一个地址家族 AF_INET6 用于第 6 版因特网协议( IPv6)寻址。
Python 2.5 中引入了对特殊类型的 Linux 套接字的支持。套接字的 AF_NETLINK 家族(无连接[见 2.3.3 节])允许使用标准的 BSD 套接字接口进行用户级别和内核级别代码之间的 IPC。
针对 Linux 的另一种特性( Python 2.6 中新增)就是支持透明的进程间通信( TIPC)协议。 TIPC 允许计算机集群之中的机器相互通信,而无须使用基于 IP 的寻址方式。 Python 对TIPC 的支持以 AF_TIPC 家族的方式呈现
套接字地址:主机-端口对
面向连接的套接字:实现这种连接类型的主要协议是传输控制协议(更为人熟知的是它的缩写 TCP)。为 了创建 TCP 套接字,必须使用 SOCK_STREAM 作为套接字类型。 TCP 套接字的名字SOCK_STREAM 基于流套接字的其中一种表示。
无连接的套接字:实现这种连接类型的主要协议是用户数据报协议(更为人熟知的是其缩写 UDP)。为 了创建 UDP 套接字,必须使用 SOCK_DGRAM 作为套接字类型。
socket()模块函数
使用 socket.socket()函数,它一般的语法如下。
socket(socket_family, socket_type, protocol=0)
创建 TCP/IP 套接字,可以用下面的方式调用 socket.socket()。
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
创建 UDP/IP 套接字,需要执行以下语句。
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
套接字对象(内置)方法
socket_server.py
import socket
from time import ctime
#HOST 变量是空白的,这是对 bind()方法的标识,表示它可以使用任何可用的地址。
Host=''
Port=21567
BufSize=1024
ADDR=(Host,Port)
tcpsersock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpsersock.bind(ADDR)
tcpsersock.listen(5)
while True:
print('waiting for connecting ....')
tcpclisock,c_addr=tcpsersock.accept()
print('.....connected from:',c_addr)
while True:
data=tcpclisock.recv(BufSize)
if not data:
break
tcpclisock.send(bytes(ctime(),'utf-8')+data)
tcpclisock.close()
tcpsersock.close()
socket_client.py
import socket
#声明协议类型
Host='127.0.0.1'
Port=21567
BufSize=1024
ADDR=(Host,Port)
tcpclisock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpclisock.connect(ADDR)
while True:
data=input('in>>')
if not data:
break
tcpclisock.send(bytes(data,'utf-8'))
data=tcpclisock.recv(BufSize)
if not data:
break
print(data.decode('utf-8'))
tcpclisock.close()
socket模块属性: