从小白到小黑 python学习之旅 日常总结 36(socket套接字)
socket
socket是什么
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
套接字工作流程(TCP)

服务端
# 服务端应该满足的特点: # 1、一直提供服务 # 2、并发地提供服务(暂时还没有) import socket # 1、买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket.SOCK_STREAM 流式协议=》tcp协议 # 2、绑定手机卡 phone.bind(('127.0.0.1',8080)) # 0-65535, 1024以前的都被系统保留使用 # 3、开机 phone.listen(5) # 5指的是半连接池的大小 print('服务端启动完成,监听地址为:%s:%s' %('127.0.0.1',8080)) # 加上链接循环 while True: # 4、等待电话连接请求:拿到电话连接conn conn,client_addr=phone.accept() # 5、通信:收\发消息 while True: try: data=conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是bytes类型 # if len(data) == 0: # 在unix系统洗,一旦data收到的是空 # 意味着是一种异常的行为:客户度非法断开了链接 # break print("客户端发来的消息:",data.decode('utf-8')) conn.send(data.upper())# 发送数据 except Exception: # 针对windows系统 break # 6、关闭电话连接conn(必选的回收资源的操作) conn.close() # 7、关机(可选操作) phone.close()
客户端
import socket #1、买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 流式协议=》tcp协议 #2、拨通服务端电话 phone.connect(('127.0.0.1',8080)) #3、通信 while True: msg=input("输入要发送的消息>>>: ").strip() #msg='' if len(msg) == 0:continue #不要输入空 服务端接收不到 phone.send(msg.encode('utf-8')) print('======?') data=phone.recv(1024) print(data.decode('utf-8')) #4、关闭连接(必选的回收资源的操作) phone.close()
UDP
服务端
import socket server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议=》udp协议 server.bind(('127.0.0.1',8081)) while True: data,client_addr=server.recvfrom(1024) print(data) server.sendto(data.upper(),client_addr) server.close()
客户端
import socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 流式协议=》tcp协议 while True: msg=input('>>>: ').strip() client.sendto(msg.encode('utf-8'),('127.0.0.1',8081)) res=client.recvfrom(1024) print(res) client.close()

浙公网安备 33010602011771号