Python实现UDP协议下的文件传输

UDP协议下文件传输:

  • 服务端
import socket

count = 0
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_addr = ('127.0.0.1',9999)
s.bind(server_addr)

print('Bind UDP on 9999...')
while True:
    if count == 0:
        data,client_addr = s.recvfrom(1024)
        print('connected from %s:%s'%client_addr)
        f = open(data, 'wb')
    data, client_addr = s.recvfrom(1024)
    if str(data) != "b'end'":
        f.write(data)
        print('recieved '+str(count)+' byte')
    else:
        break
    s.sendto('ok'.encode('utf-8'),client_addr)
    count+=1
print('recercled'+str(count))
f.close()
s.close()

    # data, addr = s.recvfrom(1024)
    # print('Received from %s:%s' %addr)
    # s.sendto(b'Hello, %s!' %data, addr)
  • 客户端
import socket
import os
import time

def Get_FilePath_FileName_FileExt(filename):
    filepath, tempfilename = os.path.split(filename)
    shotname, extension = os.path.splitext(tempfilename)
    return filepath, shotname, extension

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

filename = input('please enter the filename you want to send:\n')
filepath, shotname, extension = Get_FilePath_FileName_FileExt(filename)

client_addr = ('127.0.0.1',9999)
f = open(filename,'rb')
count = 0
flag = 1
while True:
    if count == 0:
        data = bytes(shotname+extension, encoding = "utf8")
        start = time.time()
        s.sendto(data,client_addr)
    data = f.read(1024)
    if str(data) != "b''":
        s.sendto(data,client_addr)
        print(str(count)+'byte')

    else:
        s.sendto('end'.encode('utf-8'),client_addr)
        break
    data, server_addr = s.recvfrom(1024)
    count+=1
print('recircled'+str(count))
s.close
end = time.time()
print('cost'+str(round(end-start,2))+'s')
# for data in [b'Michael',b'Tracy',b'Sarah']:
#     s.sendto(data,('127.0.0.1',9999))
#     print(s.recv(1024).decode('utf-8'))
# s.close()

  • 此次试验为100000Byte大小的文件,运行后查看服务器端信息:

在这里插入图片描述

  • 客户端上查看传输时延:
    在这里插入图片描述
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Python基于UDP文件传输系统是一种使用Python编程语言开发的文件传输系统,它基于UDP协议进行数据传输。该系统可以实现高效、快速、可靠的文件传输,适用于各种网络环境。通过该系统,用户可以方便地传输大文件、小文件、多个文件等。同时,该系统还具有良好的可扩展性和灵活性,可以根据用户需求进行定制化开发。 ### 回答2: Python基于UDP文件传输系统是一种高效、快速的文件传输方式。该系统使用UDP协议进行数据传输,因此可以减少TCP协议中所包含的握手和关闭连接等开销,从而提高了传输效率。 该系统主要包含四个部分:客户端、服务端、数据包协议和文件操作。客户端和服务端是系统的主要组成部分,客户端主要发送请求,并接收数据,服务端主要接收请求,并向客户端发送数据。数据包协议则是对数据传输进行控制和监测,以确保数据传输的正确性和完整性。这一部分通常需要定义数据包类型、数据包格式和校验码等。最后,文件操作则应用于存储和处理文件,它可以将需要传输的文件信息存储到内存中,并将其转化为数据包进行传输。 在使用该系统进行文件传输时,需要进行如下步骤: 1.客户端发送请求:客户端向服务端发送请求,请求指定需要传输的文件信息以及服务器地址和端口。 2.服务端接收请求并响应:服务端接收到客户端的请求后,会对请求进行验证,并向客户端发送响应。响应消息中包含有文件的元信息。 3.客户端接收响应,发送ACK:客户端接收到响应消息后,会先进行验证,然后发送ACK确认消息。 4.服务端发送数据包:服务端在接收到ACK确认消息后,开始发送数据包。数据包协议控制数据包的格式和大小。 5.客户端接收数据包:客户端接收到服务端发送的数据包后,会将其转化为文件,并将传输进度显示给用户。 6.传输完成:传输完成后,可以对文件进行数据校验,以确保接收到的文件内容完整正确。 Python基于UDP文件传输系统有很多优点,如高效快速、低延迟、数据传输稳定等。但也需要注意一些问题,如数据丢失、数据损坏、重传等。在实际使用中需要进行一定的优化和改进,以提高传输效率和可靠性。 ### 回答3: Python基于UDP文件传输系统是一种通过网络传输文件的解决方案,使用了Python编程语言和UDP传输协议。与TCP协议相比,UDP协议不具备数据包确认和重传等特征,但是具备低延迟、高吞吐量和简单的优点。 Python基于UDP文件传输系统通常由一个服务器和多个客户端组成。服务器需要开启一个UDP端口,监听客户端请求,客户端则可以通过UDP连接到服务器,发送请求和接收服务器传输的文件。一般来说,客户端需要提供想要传输的文件名和服务器的IP地址和端口号,服务器会根据请求的文件名查找文件并把文件数据以UDP数据包的形式发送给客户端。 但是,基于UDP文件传输系统也存在一些不足,如数据传输不可靠,数据包可能会丢失或损坏,需要进行数据完整性检查和容错处理;同时存在流量控制和拥塞控制等问题。因此,在实际应用中,为了提高传输效率和数据可靠性,可以将UDP和TCP协议结合使用,例如将文件在UDP协议下传输,检查数据是否有误后,再使用TCP协议进行数据包重新传输或连接控制。 总之,Python基于UDP文件传输系统是一种简单且高效的文件传输解决方案,能够满足中小型文件传输的需求,但仍需要进行数据完整性检查和容错处理来保障传输的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值