创建一个udp客户端程序的流程是简单,具体步骤如下:
- 创建客户端套接字
- 发送/接收数据
- 关闭套接字
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。
UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。但UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。
现在给大家展现一个关于服务端和客户端的交互端口程序代码如下,具体介绍在代码中有详细的注明:
'''
socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:
它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的
例如我们每天浏览网页、QQ 聊天、收发 email 等等
'''
客户端代码:
from socket import *
# 发起udp请求 resSocket=socket(AF_INET,SOCK_DGRAM) # 要发送的地址,服务端地址 sendAddr=('192.168.8.195',8888) # 绑定本地端口 # ip地址和端口号,ip一般不用写,表示本机的任何一个ip resSocket.bind(('192.168.8.195',6666)) #发送方也可以绑定 # resSocket.bind(bindAddr) n=10 while n>0: # 4. 发送数据到指定的电脑上 # 第一个参数是二进制对象,要将字符串转换为二进制对象, # 需要使用encode方法,根据对方接收什么编码,进行解码。 sendData = input('请输入客户端要发送的数据:') # sendData要用encode('gbk')编码成byte型 resSocket.sendto(sendData.encode('gbk'), sendAddr) # 接收服务端信息 recvData=resSocket.recvfrom(1024) # 发送的内容recvData[0].decode('gbk')要用decode进行解码,解码的类型和发送端编码类型一致 print('发送方%s,端口号%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk'))) n=n-1 resSocket.close()
服务端代码:
from socket import * #1. 创建套接字 # 创建请求协议 # SOCK_DGRAM表示UDP协议,AF_INET表示ipv4 udpSocket=socket(AF_INET,SOCK_DGRAM) # 发送/接收数据 #2. 准备接收方的地址 # 准备要发送数据到的客户ip地址,即客户端 sendAddr=('192.168.8.195',6666) # 绑定本端口地址,服务端和客户端ip地址可以一样但是端口必须不一样 udpSocket.bind(('192.168.8.195',8888)) n=10 while n>0: # 第一时间接收客户端到信息, recvData=udpSocket.recvfrom(1024) # 输出收到的信息 print('发送方:%s端口号:%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk'))) # 3. 从键盘获取数据 sendData = input('请输入要发送的数据:') # 4. 发送数据到指定的电脑上:向客户端发送数据 udpSocket.sendto(sendData.encode('gbk'), sendAddr) n=n-1 # 5关闭请求协议(关闭套接字) udpSocket.close()