4. socket
- 作用:Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
- 基于TCP协议socket
服务端:import socketphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #网络通信种类,tcp 协议 流式协议print(phone)phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #重新用端口# 本地回环地址,用于测试,只能自己访问phone.bind(('127.0.0.1',8080)) #固定IP 端口phone.listen(5) #半连接池#等待消息print('start..')while True : conn,client_addr=phone.accept() #(三次握手建立双向链接,(客户端的IP,端口) print('链接成功') #客户端运行,服务端打印此信息 print(client_addr) #客户端地址 print(conn) # 套接字对象#通信 while True : try: data=conn.recv(1024) #最大接受的字节数,没有数据会在原地一直等待收,即发送者发送的数据必须大于0bytes if len(data)== 0: break #在客户端单方面断开链接,服务端出现收空数据的情况 conn.send(data.upper()) #发消息 except ConnectionResetError : #win系统针对于解决客户端不发信息,服务端报错问题 break conn.close()phone.close()客户端:import socketphone = socket .socket (socket .AF_INET ,socket .SOCK_STREAM )print(phone)phone.connect(('127.0.0.1',8080)) #指定服务端的IP和端口while True : msg = input('<<<') phone.send(bytes(msg,encoding= 'utf-8')) #传输二进制 data = phone.recv(1024) #收消息 print(data)phone.close()#步骤#(1)确认网络通信类型和协议 (2)指定服务端的IP和端口 (3)发收消息(4)关闭
客户端:import socketserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udpserver.bind(('127.0.0.1',8080))while True: data,client_addr=server.recvfrom(1024) print('===>',data,client_addr) server.sendto(data.upper(),client_addr)server.close()服务端:import socketclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udpwhile True: msg=input('>>: ').strip() #msg='' client.sendto(msg.encode('utf-8'),('127.0.0.1',8080)) data,server_addr=client.recvfrom(1024) print(data)client.close()