首页 > 解决方案 > python socket:在两台计算机之间发送文件

问题描述

我正在尝试在两台计算机之间下载文件。服务器端计算机将下载文件,客户端计算机将文件发送到服务器端计算机。我写了下面的代码来实现这种情况,但是出了点问题。下面的代码有什么问题。

# server
import socket
import os

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("10.0.2.15", 5555))
s.listen(100)
c, addr = s.accept()
def save_file(file_name):
    while 1:
        c.send(file_name.encode())
        confirmation = c.recv(1024).decode()
        if confirmation == "file-doesn't-exist":
            print("File doesn't exist on server.")
        else:
            write_name = file_name[9:]
            with open(write_name, 'wb') as _file:
                while 1:
                    data = c.recv(1024)
                    if not data:
                        break
                    file.write(data)
            return '[+] ' + write_name + ' successfully downloaded.'

def run():
    while 1:
        data = ""
        cmd = raw_input('command>> ')
        if cmd[:8] == "download":
            data = save_file(cmd)
        print(data)

if __name__ == "__main__":
    run()
#client
import socket
import os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect("10.0.2.15", 5555)
def send_file(path):
    if not os.path.exists(path):
        s.send("file-doesn't-exist".encode())
    else:
        s.send("file-exists".encode())
        if path != "":
            _file = open(path, "rb")
            path = _file.read(1024)
            while path:
                s.send(path)
                path = _file.read(1024)
def run():
    command = s.recv(1024).decode()
    if command[:8] == "download":
        s.send(command[9:])

if __name__ == "__main__":
    run()

标签: pythonsockets

解决方案


推荐阅读