1.UDP协议和TCP协议的区别
UDP(User Data Protocol)用户数据报协议, 是⼀个⽆连接的简单的⾯向数据报的传输层协议。 UDP不提供可靠性, 它只是把应⽤程序传给IP层的数据报发送出去, 但是并不能保证它们能到达⽬的地。 由于UDP在传输数据报前不⽤在客户和服务器之间建⽴⼀个连接, 且没有超时重发等机制, 故⽽传输速度很快。
常见的有:语音通话、视频通话、实时游戏画面 等。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接,然后再进行收发数据。
常见有:网站、手机APP数据获取等。
2.UDP协议示例代码:
服务端 ```python import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind((‘127.0.0.1’, 8002))
while True: data, (host, port) = server.recvfrom(1024) # 阻塞 print(data, host, port) server.sendto(“好的”.encode(‘utf-8’), (host, port))
- 客户端```pythonimport socketclient = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:text = input("请输入要发送的内容:")if text.upper() == 'Q':breakclient.sendto(text.encode('utf-8'), ('127.0.0.1', 8002))data, (host, port) = client.recvfrom(1024)print(data.decode('utf-8'))client.close()
3.TCP协议示例代码
- 服务端 ```python import socket
1.监听本机的IP和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((‘127.0.0.1’, 8001)) sock.listen(5)
while True:
# 2.等待,有人来连接(阻塞)conn, addr = sock.accept()# 3.等待,连接者发送消息(阻塞)client_data = conn.recv(1024)print(client_data)# 4.给连接者回复消息conn.sendall(b"hello world")# 5.关闭连接conn.close()
6.停止服务端程序
sock.close()
- 客户端```pythonimport socket# 1. 向指定IP发送连接请求client = socket.socket()client.connect(('127.0.0.1', 8001))# 2. 连接成功之后,发送消息client.sendall(b'hello')# 3. 等待,消息的回复(阻塞)reply = client.recv(1024)print(reply)# 4. 关闭连接client.close()
