题目要求
为巩固提高网络编程能力,加深对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(