TCP、UDP文件传输分析

题目要求

为巩固提高网络编程能力,加深对socket套接字的使用,并进一步的理解UDP和TCP之间的不同,该题目主要需完成以下两个目标:

  • 实现跨物理主机的文件传输系统。

    • 分别使用TCP和UDP协议,利用socket库,完成一个文件传输程序。
    • 文本文件能够跨物理主机在局域网内进行传输。
    • 语言不限(python,java,C,C++,C#)。
  • 分析文件传输的时延。

    • 分析在UDP协议下,文件传输系统在传输不同大小的文件时的传输时延。
    • 分析在TCP协议下,文件传输系统在传输不同大小的文件时的传输时延。
    • 文件大小分别为100M,200M,300M,400M,500M,600M,700M,800M,900M,1G。
    • 将上述分析结果制作成折线图,并对折线图趋势进行分析。

 

跨物理主机的文件传输

局域网上服务器端等待客户端连接(TCP):

检测到192.168.43.252连接成功,做出消息相应,客户端传输文件text.txt,在服务器端接收到文件并且做出消息相应。

 

在当前项目文件夹查看是否收到了文件:

接收成功。

UDP协议同理。

 

分析文件传输的时延

首先,准备好100-1G大小的文件:

 

在python中写一个简单的生成随机文件大小的程序。

import os
import time

def GetUserName():
    nameList = os.popen('echo %username%').readlines()
    username = nameList[0].replace("\n","")

    return username

def getNowDataTime(flag = 0):
    now = time.localtime(time.time())
    if flag == 0:
        return time.strftime('%Y-%m-%d %H:%M:%S',now)

def GenerateTXTFile():
    while True:
        size = input('please enter the size that you want to create(MB):')
        if size.strip().isdigit() != True:
            print('please enter a integer!')
            continue
        else:
            fileSize = int(size)
            break
    if fileSize >= 100:
        print('creating TXT file,please waiting...')
    filename = '_'+size +'MB.txt'
    print(f'filename:{filename}')
    filepath ='E:\\ '
    f = open( 'E:\\'+  filename,'w')
    starttime = getNowDataTime()
    startclock = time.clock()
    for i in range(fileSize):
        if i>=100:
            if i%100 == 0:
                print(f'created{i//100*100}MB data.')
        for j in range(1024):
            try:
                f.write('01'*512)
            except KeyboardInterrupt:
                print('\n keyboardInterupt!')
                f.close()
                exit(-1)
    f.close()
    print(f'file has been created at '+filepath+ '!'+'size:{fileSize}MB.\n')
    print(f'DetailInfo:')
    print(f'save path:{filepath+filename}')
    print(f'start time:{starttime}')
    print(f'endtime:{getNowDataTime()}')
    print(f'use time:{(time.clock() - startclock):<.3}sec.')

if __name__ == '__main__':
    GenerateTXTFile(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值