Python网络编程-UDP(基于socket)

UDP网络编程实战

基于socket库,socket是Python3的标准库。搭建一个简易的服务器与客户端,让他们之间做简单的数据交互。

1.UDP数据传输流程

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。UDP端口号指定有两种方式:由管理机构指定端口和动态绑定的方式。

UDP

在选择UDP作为传输协议时必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议,广播和多播也可用UDP

UDP没有TCP的“三次握手”,不能保证数据正确送达,但是可以建立多连接,速度快,资源消耗小

2.服务端构建

#Authors:xiaobei

######服务端构建#####

import socket
#创建一个socket
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定IP
#IP隐藏,大家可以用自己IP,为安全考虑
server.bind(("*****(IP)******",8080))
print("服务器已启动")
#进入事件循环
while True:
    #接收数据
    data,clientAddress = server.recvfrom(1024)
    print("%s发来数据:%s"%(str(clientAddress),data.decode("utf-8")))
    #发送数据
    data = input("请输入响应数据:")
    server.sendto(data.encode("utf-8"),clientAddress)
    print("已发送")

大家可以用自己IP,为安全考虑

3.客户端的创建

#Authors:xiaobei

######客户端创建######

import socket
#创建一个socket
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    #发送数据
    data = input("请输入发送数据:")
    client.sendto(data.encode("utf-8"),("******(IP)******",8080))
    print("已发送")
    #接收数据
    answer = client.recv(1024).decode("utf-8")
    print("服务器响应数据",answer)

4.本机IP查找

打开cmd,输入“ipconfig",可以得到本机的IP。

>>>ipconfig

原文地址:https://www.cnblogs.com/slz99/p/12527736.html