通信协议与数据传输
通信协议
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()

浙公网安备 33010602011771号