网站后台系统使用,dede做的网站弹广告,做公司网站要学会什么,温州高端网站定制学号 2019-2020-2 《Python程序设计》实验3报告课程#xff1a;《Python程序设计》班级#xff1a;1924姓名#xff1a; 万腾阳学号#xff1a;20192419实验教师#xff1a;王志强实验日期#xff1a;2020年5月16日必修/选修#xff1a; 公选课1.实验内容创建服务端和客…学号 2019-2020-2 《Python程序设计》实验3报告课程《Python程序设计》班级1924姓名 万腾阳学号20192419实验教师王志强实验日期2020年5月16日必修/选修 公选课1.实验内容创建服务端和客户端服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。2. 实验过程及结果先引入socket 库随后还需要os,struct,sys等由于这里使用的是base64加密所以需要引入base64库进行加密。准备工作做完了就开始建立连接了。建立连接时要找出没有被占有的端口否则无法连接。同时还要找到可使用的IP地址连接完毕后就可以传输文件了。服务器端先是等待请求并接受(程序会停留在这一旦收到连接请求即开启接受数据的线程)接收数据收到请求后回复申请相同大小的空间存放发送过来的文件名与文件大小信息接收文件名与文件大小信息判断是否接收到文件头信息获取文件名和文件大小将分批次传输的二进制流依次写入到文件此时文件应为base64 传输结束记得断开连接避免出现错误。客户端创建套接字对象 ‘s’建立需要传输的文件路径定义定义文件信息。128s表示文件名为128bytes长l表示一个int或log文件类型在此为文件大小将文件进行base64加密将传输文件以二进制的形式分多次上传至服务器之后关闭套接字对象。客户端代码import socketimport osimport sysimport structimport base64f_org open(rD:\qwer.txt, r)content f_org.read()content1 content.encode(encodingutf-8)content2 base64.b64encode(content1)f_org.close()with open(rD:\qwer.txt, wb) as f_org:f_org.write(content2)print(have encrypted,the ciphertext is: str(content2))def socket_client():try:s socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((127.0.0.1, 9001))except socket.error as msg:print(msg)sys.exit(1)print(s.recv(1024))filepath rD:\qwer.txtif os.path.isfile(filepath):fileinfo_size struct.calcsize(128sl)fhead struct.pack(128sl, os.path.basename(filepath).encode(utf-8), os.stat(filepath).st_size)s.send(fhead)fp open(filepath, rb)while 1:data fp.read(1024)if not data:print({0} file send over....format(os.path.basename(filepath)))breaks.send(data)s.close()if __name__ __main__:socket_client()服务器端代码import sysimport osimport base64def socket_service():try:s socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.bind((127.0.0.1, 9001))s.listen(10)except socket.error as msg:print(msg)sys.exit(1)print(Waiting connection...)while 1:conn, addr s.accept()t threading.Thread(targetdeal_data, args(conn, addr))t.start()def deal_data(conn, addr):print(Accept new connection from {0}.format(addr))conn.send(Hi, Welcome to the server!.encode(utf-8))while 1:fileinfo_size struct.calcsize(128sl)buf conn.recv(fileinfo_size)if buf:filename, filesize struct.unpack(128sl, buf)fn filename.strip(b\00)fn fn.decode()print(file new name is {0}, filesize if {1}.format(str(fn), filesize))recvd_size 0os.chdir(rC:\Users\86186\Desktop)fp open(./ str(fn), wb)print(start receiving...)while not recvd_size filesize:if filesize - recvd_size 1024:data conn.recv(1024)recvd_size len(data)else:data conn.recv(filesize - recvd_size)recvd_size filesizefp.write(data)url datastr_url base64.b64decode(url).decode(utf-8)file open(rC:\Users\86186\Desktop./ str(fn) , w)file.write(str_url)fp.close()print(end receive...)conn.close()breakif __name__ __main__:socket_service()部分运行结果3. 实验过程中遇到的问题和解决过程之前有一次搭建服务器时我想试着用自己的IP地址然后上网去找找到后就直接运行了客户端随后一直被服务器拒取。后来才发现我忘记先运行服务器了。随后的加密文件让我陷入了苦恼python库中含有哈希值加密但后面去查找竟然没有用哈希值解密这样的贴子。然后我只能采取了base64加密说是加密其实也算是一种伪加密它只是换了一种编码方式而已任何人通过python中的base64库进行解密。其他(感悟、思考等)这次实验因为还没有学习服务器的相关知识大多数都是靠着百度完善的代码。要想熟练运用python必须多实践多编写代码这样运用起来就轻松很多。当然做实验前还需要把每个细节弄清楚弄明白实验后还要复习思考这样印象深刻记得才牢固否则实验后就会忘得一干二净这还不如不做。透过这次实验我学到了不少知识更重要的事做实验的过程思考问题的方法这与做其他的实验是通用的真正使我们受益匪浅。