socket
socket通常称为'套接字',用于描述ip地址和端口,是一个通信链的句柄,应用程序通常通过'套接字'向网络发出请求或者应答网络请求.
socket起源于Unix,Unix/Linux基本哲学之一就是'一切皆文件',对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO,打开,关闭)
socket和file的区别:
file模块是针对某个指定文件进行[打开][读写][关闭]
socket模块是针对服务器端和客户端进行[打开][读写][关闭]
客户端: cs架构, client -> server
浏览器:bs架构, browser-> server
基于socket模块实现网络通信
python2 ,send/recv 发送的都是字符串
python3 ,send/recv 发送的都是字节(需要将发送的信息转换为字节)
阻塞:
服务端:
accept, 阻塞:等待客户端来连接
recv, 阻塞:等待客户端发送数据
客户端:
connect, 阻塞:一直连接,直到连接成功才往下运行其他代码
recv, 阻塞:等待服务端发送数据
基于TCP协议的socket
import socket server = socket.socket() server.bind(('192.168.13.188', 9001)) server.listen(5) conn,addr = server.accept() response = conn.recv(1024) print(response) conn.send(b'This is server') conn.close()
import socket client = socket.socket() client.connect(('192.168.13.188', 9001)) client.send(b'This is client.') response = client.recv(1024) print(response) client.close()
基于UDP协议的socket
import socket server = socket.socket(type=socket.SOCK_DGRAM)#创建一个服务器套接字 ip_port = ('127.0.0.1', 8000) server.bind(ip_port) #绑定服务器套接字 conn, addr= server.recvfrom(1024) print(conn.decode('utf-8')) server.sendto('hello'.encode('utf-8'), addr) #对话,接收与发送 server.close() #关闭服务器套接字
import socket client = socket.socket(type=socket.SOCK_DGRAM) ip_port = ('127.0.0.1', 8000) client.sendto('world'.encode('utf-8'), ip_port) conn,addr = client.recvfrom(1024) print(conn.decode('utf-8'), addr)