• 034文件上传


    因为这个是简单的,所以很容易
    思想就是建立连接后,客户端发送文件名字和大小到服务端,服务端接受后,客户端开始发送文件,直到发完。具体的还是要看下面的代码,我自己实现了一遍

     1 import  socket
     2 import  os
     3 
     4 def get_server_socket():
     5     sk = socket.socket()
     6     address = ('127.0.0.1',8888)
     7     sk.bind(address)
     8     sk.listen(3)
     9     return sk
    10 
    11 def  wait_connect(sk):
    12     print('waitconnecting...')
    13     conn, addr = sk.accept()
    14     return conn
    15 
    16 if  __name__ == '__main__':
    17     sk = get_server_socket()
    18     conn = wait_connect(sk)
    19     BASIC_DIR = os.path.dirname(os.path.abspath(__file__))
    20     while True:
    21         data = str(conn.recv(1024),'utf8')
    22         cmd,filename,file_size = data.split('|')
    23         path = os.path.join(BASIC_DIR,'yuan',filename)
    24         file_size = int(file_size)
    25     f = open(path,'wb')
    26     has_receive = 0
    27     while has_receive != file_size:
    28         data = conn.recv(1024)
    29         f.write(data)
    30         has_receive += len(data)
    31     f.close()
    post_server.py
     1 import  socket
     2 import  os
     3 
     4 def  get_client_socket():
     5     sk = socket.socket()
     6     address = ('127.0.0.1',8888)
     7     sk.connect(address)
     8     return sk
     9 
    10 if __name__ == '__main__':
    11     BASIC_DIR = os.path.dirname(os.path.abspath(__file__))
    12     sk = get_client_socket()
    13     while  True:
    14         inp = input('>>>').strip()#post|11.png
    15         cmd,path = inp.split('|')
    16         path = os.path.join(BASIC_DIR,path)#使用系统的路径拼接
    17         filename = os.path.basename(path)#拿到文件名字
    18         file_size = os.stat(filename).st_size#拿到文件的大小
    19         file_info = 'post|%s|%s'%(filename,file_size)
    20         sk.sendall(bytes(file_info,'utf8'))
    21     f = open(path,'rb')
    22     has_sent = 0
    23     while has_sent != file_size:
    24         data = f.read(1024)
    25         sk.sendall(data)
    26         has_sent += len(data)
    27     f.close()
    28     print('上传完成')
    post_client.py
  • 相关阅读:
    ASP.NET在禁用视图状态的情况下仍然使用ViewState对象【转】
    Atcoder Regular Contest 061 D Card Game for Three(组合数学)
    Solution 「CERC 2016」「洛谷 P3684」机棚障碍
    Solution 「CF 599E」Sandy and Nuts
    Solution 「洛谷 P6021」洪水
    Solution 「ARC 058C」「AT 1975」Iroha and Haiku
    Solution 「POI 2011」「洛谷 P3527」METMeteors
    Solution 「CF 1023F」Mobile Phone Network
    Solution 「SP 6779」GSS7
    Solution 「LOCAL」大括号树
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8504286.html
Copyright © 2020-2023  润新知