Python学习笔记-Day30-socket套接字
内容大纲
一、C/S架构和B/S架构
二、socket套接字及在python中的应用
一、C/S架构和B/S架构
B/S架构:Browser/Server,浏览器端和服务端架构,通过浏览器访问服务器,例如百度等。B/S是趋势,能够统一程序的入口,例如微信小程序
C/S架构:Client/Server,客户端与服务器端架构,通过客户端访问服务器,例如qq客户端、微信客户端等,BS架构也是一种CS架构
二、socket套接字
1、什么是套接字?
socket是应用层和TCP/IP协议族通信的中间软件抽象层,它是一组接口。
站在我们的角度,socket就是一个模块,我们通过调用模块中的方法建立两个进程之间的链接和哦通信。
也有人认为socket就是ip+port,ip用来标识互联网中主机的位置,port用来标识这台机器的应用程序的位置,所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块与之通信。
基于文件类型的套接字家族:AF_UNIX
基于网络类型的套接字家族:AF_INET
三、基于TCP协议的socket
tcp是基于链接的,必须先启动服务器端,然后在客户端去链接服务器端
server端的代码:
import socket sk = socket.socket() # 实例化一个socket对象 sk.bind(('127.0.0.1',8056)) # 把地址绑定到套接字 sk.listen() # 监听链接 ,括号里可加允许的阻塞数量,默认为无数,py3.4之前一定要加数量 conn,addr = sk.accept() # 接收客户端的链接,与客户端的connect组成三次握手 conn.send('msg'.encode('utf-8')) # 发送消息给客户端,消息必须是bytes类型 msg = conn.recv(1024) # 接收客户端的消息,括号里是允许接收的最大的字节数 conn.close() # 关闭与客户端的链接 sk.close() # 关闭服务器,通常不会关闭服务器
client端的代码
import socket sk = socket.socket() # 实例化一个socket对象 sk.connect(('127.0.0.1',8056)) # 尝试链接服务器 sk.send('msg'.encode('utf-8')) # 发送消息 msg = sk.recv(1024) # 接收消息 print(msg.decode('utf-8')) sk.close() # 关闭客户端的套接字
四、基于UDP的socket
udp是无链接的,启动服务器之后可以直接接收消息,不需要提前建立链接
server端的代码:
import socket udp_sk = socket.socket(type=socket.SOCK_DGRAM) udp_sk.bind(('127.0.0.1',9000)) # 绑定服务器套接字 msg,addr = udp_sk.recvfrom(1024) # 接收客户端的消息和地址 udp_sk.sendto('msg'.encode('utf-8'),addr) # 发送消息给客户端 udp_sk.close() # 关闭服务器套接字
client端的代码:
import socket udp_sk = socket.socket(type=socket.SOCK_DGRAM) # 实例化一个对象 udp_sk.sendto('hello'.encode('utf-8'),('127.0.0.1',9000)) # 发送消息 msg,addr = udp_sk.recvfrom(1024) # 接收消息 udp_sk.close() # 关闭