通信协议
TCP协议
传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP协议
用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
socket(套接字)
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
数据传输
基于TCP协议的socket
服务器端
import socket sk = socket.socket() sk.bind(('127.0.0.1', 2025)) sk.listen() while 1: cron, addr = sk.accept() print('the connection from', addr) while 1: con_r = cron.recv(1024).decode('utf-8') print(con_r) if con_r == 'q': break con_s = input('>>>') cron.send(con_s.encode('utf-8')) cron.close() sk.close()
客户端
import socket sk=socket.socket() sk.connect(('127.0.0.1',2025)) while 1: con_s=input('>>>') sk.send(con_s.encode('utf-8')) if con_s=='q': break con_r=sk.recv(1024).decode('utf-8') print(con_r) if con_r=='q': break sk.close()
基于UDP协议的socket
服务器端
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 sk.bind(('127.0.0.1',8090)) # 收发 while 1: msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8')) msg_s = input(('>>>')) sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息 sk.close()
客户端
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 name = input('请输入您的名字:') # 收发 while 1: msg_s = input(('>>>')) info = name + ' : ' + msg_s #因为udp协议是不连接的 所以发送的时候可以加上名字 sk.sendto(info.encode('utf-8'), ('127.0.0.1',8090)) # 发给谁的消息 msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8')) sk.close()
来源:https://www.cnblogs.com/luxiangyu111/p/9506230.html