基于socket实现上传文件

基于socket实现文件上传

客户端代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
这个是实现上传文件
首先让客户端传递给服务端文件的大小,
然后读取文件,之后发送给服务端
"""
import os
import socket
obj = socket.socket()
obj.connect(("127.0.0.1",111))

#阻塞
ret_bytes = obj.recv(1024)
ret_str = str(ret_bytes,encoding="utf-8")
print(ret_str)

#发送当前文件大小
size = os.stat("f.png").st_size
obj.sendall(bytes(str(size),encoding="utf-8"))

#发送文件
with open("f.png","rb") as f:
    for line in f:
        obj.sendall(line)
obj.close()

服务端

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
先接收客户端传递过来文件的大小
之后开始读取文件,并且做一个判断,如果大小读取完毕之后关闭
"""
import socket
sk = socket.socket()
sk.bind(("127.0.0.1",111))
sk.listen()
#连接客户端信息
while True:
    conn,adress = sk.accept()#开始阻塞
    conn.sendall(bytes("welcome entry FTP",encoding="utf-8"))
    #先接收文件大小,然后开始接收客户端信息
    file_size = str(conn.recv(1024),encoding="utf-8")
    print(file_size)
    totle_size = int(file_size)
    #传递过来开始大小为0
    has_recv = 0
    #以二进制方式接收,因为sendall发送的是二进制文件
    f = open("new.png","wb")
    #接收文件内容,直到获取完毕
    while True:
        if totle_size == has_recv:
            break
        data = conn.recv(1024)
        f.write(data)
        has_recv = len(data)
    f.close()

 

posted @ 2017-02-22 11:49  pyrene  阅读(359)  评论(0编辑  收藏  举报