zoukankan      html  css  js  c++  java
  • socket实现文件上传(客户端向服务器端上传照片示例)

    本示例在对socket有了基本了解之后,可以实现基本的文件上传。首先先介绍一下目录结构,server_data文件夹是用来存放客户端上传的文件,client_data是模拟客户端文件夹(目的是为了测试文件夹下的文件能否上传) ,还有两个主要的py文件,onload_server.py  onload_client.py 。

    目录结构如图:

    下面直接上两段主要py文件代码:

    客户端(上传端)代码:

     1 #__author__:Kelvin
     2 #date:2020/2/16 11:09
     3 
     4 import socket,os
     5 
     6 sk=socket.socket()
     7 address=("127.0.0.1",8000)
     8 sk.connect(address)
     9 
    10 while True:
    11     inp=input("请输入 命令|文件名:") # post|a.jpg
    12     size=os.path.getsize(inp.split("|")[1])
    13     # print(size)
    14     inp=inp+"|%s"%size
    15     sk.send(inp.encode("utf8"))
    16     sk.recv(1024) # 接收 避免粘包发送的无效数据
    17     f=open(inp.split("|")[1],"rb")
    18     sent_size=0
    19     while sent_size!=size:
    20         sent_data=f.read(1024)
    21         sk.send(sent_data)
    22         sent_size+=len(sent_data)
    23         # print(sent_size)
    24     f.close()
    25     print("%s 文件上传成功..."%inp.split("|")[1].split("|")[-1])
    26     break
    27 sk.close()
    客户端

    服务器端(接收端)代码:

     1 #__author__:Kelvin
     2 #date:2020/2/16 11:09
     3 
     4 import socket
     5 
     6 sk=socket.socket()
     7 address=("127.0.0.1",8000)
     8 sk.bind(address)
     9 sk.listen(5)
    10 while True:
    11     conn,addr=sk.accept()
    12     print(addr,"已连接...")
    13     while True:
    14         data=conn.recv(1024).decode("utf8")
    15         size=int(data.split("|")[2])
    16         file_name=data.split("|")[1].split("/")[-1]
    17         conn.send("1".encode("utf8")) # 避免粘包,无实际作用
    18         # print(size,file_name)
    19         f=open("server_data/%s"%file_name,"wb")
    20         saved_size=0
    21         while saved_size!=size:
    22             rev_data=conn.recv(1024)
    23             f.write(rev_data)
    24             saved_size+=len(rev_data)
    25             # print(saved_size)
    26         f.close()
    27         print("%s 文件接收成功..."%file_name)
    28         conn.close()
    29         break
    服务器端

    运行输出结果展示:

     

     

  • 相关阅读:
    servlet配置restful
    Servlet异步上传文件
    JQuery全选Prop(“check”,true)和attr("attr",true)区别
    登录FTP,下载并读取文件内容
    Get请求中文乱码的几种解决方式
    系统架构概念及思想2
    系统架构概念及思想1
    Harbor高可用
    Harbor基础
    Docker原理及使用
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/12316429.html
Copyright © 2011-2022 走看看