zoukankan      html  css  js  c++  java
  • python socket上传文件的服务端和客户端实现

    python socket上传文件的服务端和客户端实现 - 玩命写博客 - 博客频道 - CSDN.NET

    python socket上传文件的服务端和客户端实现

    分类: python小毒蛇 323人阅读 评论(0) 收藏 举报

    代码均已测试:希望高人能指点一二

    服务端: 

     

    1. #coding=gbk  
    2. ''''' 
    3. 等待连接 
    4. 等待发送文件 
    5. 读取数据 
    6. 写入文件并且保存 
    7. 等待连接 
    8. '''  
    9. import socket  
    10. import threading  
    11. import time  
    12. import struct  
    13. def function(newsock, address):  
    14.     FILEINFO_SIZE = struct.calcsize('128sI')  
    15.     '''''定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),I代表一个integer or long(文件大小)'''  
    16.     while 1:       
    17.         try:  
    18.             fhead = newsock.recv(FILEINFO_SIZE)  
    19.             filename, filesize = struct.unpack('128sI', fhead)  
    20.             '''''把接收到的数据库进行解包,按照打包规则128sI'''  
    21.             print "address is: ",address  
    22.             print filename, len(filename),type(filename)  
    23.             print filesize  
    24.             filename = 'new_'+filename.strip('\00')#命名新文件new_传送的文件  
    25.             fp = open(filename,'wb')#新建文件,并且准备写入  
    26.             restsize = filesize  
    27.             print "recving..."  
    28.             while 1:  
    29.                 if restsize > 1024:#如果剩余数据包大于1024,就去1024的数据包  
    30.                     filedata = newsock.recv(1024)  
    31.                 else:  
    32.                     filedata = newsock.recv(restsize)  
    33.                     fp.write(filedata)  
    34.                     break  
    35.                 if not filedata:  
    36.                     break  
    37.                 fp.write(filedata)  
    38.                 restsize = testsize - len(filedata)#计算剩余数据包大小  
    39.                 if restsize <= 0:  
    40.                     break  
    41.             fp.close()  
    42.             print "recv succeeded !!File named:",filename  
    43.         except:  
    44.             print "he socket partner maybe closed"  
    45.             newsock.close()  
    46.             break  
    47. sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)#创建tcp连接  
    48. sock.bind(('127.0.0.1',8887))#定于端口和ip  
    49. sock.listen(5)#监听  
    50. while True:  
    51.     newsock, address = sock.accept()  
    52.     print "accept another connection"  
    53.     tmpThread = threading.Thread(target=function,args=(newsock,address)) #如果接收到文件,创建线程  
    54.     tmpThread.start()#执行线程  
    55. print 'end'  

     


    客户端: 
    1. #coding=gbk  
    2. ''''' 
    3. 输入文件名,并且上传 
    4. '''  
    5. import socket  
    6. import time  
    7. import struct  
    8. import os  
    9. sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
    10. sock.settimeout(1)  
    11. e=0  
    12. try:  
    13.     sock.connect(('127.0.0.1',8887))  
    14.     print 'connect...'  
    15. except socket.timeout,e:  
    16.     print 'timeout',e  
    17. except socket.error,e:  
    18.     print 'error',e  
    19. except e:  
    20.     print 'any',e  
    21. if not e:  
    22.     while (1):  
    23.         filename = raw_input('input your filename------->')#输入文件名  
    24.         FILEINFO_SIZE = struct.calcsize('128sI')#编码格式大小  
    25.         fhead = struct.pack('128sI',filename,os.stat(filename).st_size)#按照规则进行打包  
    26.         sock.send(fhead)#发送文件基本信息数据  
    27.         fp = open(filename,'rb')  
    28.         while 1:        #发送文件  
    29.             filedata = fp.read(1024)  
    30.             if not filedata:  
    31.                 break  
    32.             sock.send(filedata)  
    33.         print "sending over..."  
    34.         fp.close()  
  • 相关阅读:
    ArcEngine实现对点、线、面的闪烁(转载)
    好久没写博客了.把这几个月的开发过程做一个总结
    利用暴力反编译的程序处理ArcXML数据遇到的问题小结(纯粹研究目的)
    ArcSde 9.2与Oracle 10g是最佳搭档
    当ArcEngine报事件同时存在于AxMapControl,MapControl时的解决方法(转载)
    写在苏州火炬接力的最后一站
    提问,如何才能触发鼠标事件
    地铁线路图高性能查找算法系统,最短路径查询地铁网络拓扑高效率算法原创附带demo
    二分查找
    .net面试题
  • 原文地址:https://www.cnblogs.com/lexus/p/2851391.html
Copyright © 2011-2022 走看看