zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    LeetCode5654. 盒子中小球的最大数量
    LeetCode40. 组合总和 II
    LeetCode39. 组合总和
    LeetCode17. 电话号码的字母组合
    Leetcode216. 组合总和 III
    eclipse相关使用
    matlab符号的含义
    matlab矩阵相关的笔记
    vi编辑器
    Linux 环境变量
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8504286.html
Copyright © 2011-2022 走看看