赞
踩
UDP的全称是User Data Protocol(用户数据报协议),其主要特点如下:
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常, 其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包, 如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
ping命令是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping命令是使用 IP 和网络控制信息协议 (ICMP),因而没有涉及到任何传输协议(UDP/TCP) 和应用程序。它发送icmp回送请求消息给目的主机。
ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
-
- 'a udp server example which send time to client.'
-
- import socket
-
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- # 绑定端口:
- s.bind(('127.0.0.1', 9999))
- print 'Bind UDP on 9999...'
- while True:
- # 接收数据:
- data, addr = s.recvfrom(1024)
- print 'Received from %s:%s.' % addr
- s.sendto('Hello, %s!' % data, addr)
SOCK_DGRAM
指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用listen()
方法,而是直接接收来自任何客户端的数据recvfrom()
方法返回数据和客户端的地址与端口,这样,服务器收到数据后,直接调用sendto()
就可以把数据用UDP发给客户端。- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
-
- 'a socket example which send echo message to server.'
-
- import socket
-
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- for data in ['Michael', 'Tracy', 'Sarah']:
- # 发送数据:
- s.sendto(data, ('127.0.0.1', 9999))
- # 接收数据:
- print s.recv(1024)
- s.close()
connect()
,直接通过sendto()
给服务器发数据:recv()
方法。TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议。TCP/IP协议集包括应用层,传输层,网络层等各层协议。
参考资料:
https://zhuanlan.zhihu.com/p/24860273
https://blog.csdn.net/gs344937933/article/details/89534570
https://blog.csdn.net/weixin_39138071/article/details/79630133
https://www.liaoxuefeng.com/wiki/897692888725344/923056684385152
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。