Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件服务器_Python - Fatal编程技术网

Python文件服务器

Python文件服务器,python,Python,我按照一个教程做了这个,我正在尝试添加一个ls命令,以便您可以查看要下载的文件。代码运行正常,所有打印返回正确的内容,但客户端只显示其中一个文件的六个字母。 服务器: 导入套接字 导入线程 导入操作系统 def RetrFile(名称、sock): filename=sock.recv(1024) 如果文件名!=“ls”: 如果os.path.isfile(文件名): send(“存在”+str(os.path.getsize(filename))) userResponse=sock.recv

我按照一个教程做了这个,我正在尝试添加一个
ls
命令,以便您可以查看要下载的文件。代码运行正常,所有打印返回正确的内容,但客户端只显示其中一个文件的六个字母。 服务器:

导入套接字
导入线程
导入操作系统
def RetrFile(名称、sock):
filename=sock.recv(1024)
如果文件名!=“ls”:
如果os.path.isfile(文件名):
send(“存在”+str(os.path.getsize(filename)))
userResponse=sock.recv(1024)
如果userResponse[:2]=“确定”:
将open(filename,'rb')作为f:
bytesToSend=f.read(1024)
sock.send(bytesToSend)
而bytesToSend!="":
bytesToSend=f.read(1024)
sock.send(bytesToSend)
其他:
短袜发送(“错误”)
sock.close()
其他:
dir_path=os.path.dirname(os.path.realpath(_文件__))
retval=os.listdir(dir\u路径)
打印检索
对于retval中的ret:
印刷网
短袜发送(ret)
def Main():
主机='192.168.0.125'
端口=5000
s=socket.socket()
s、 绑定((主机、端口))
s、 听(5)
打印“服务器已启动”
尽管如此:
c、 addr=s.accept()
打印“客户端连接的ip:”
线程(target=RetrFile,args=(“RetrThread”,c))
t、 开始()
s、 关闭()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
Main()
包含Python文件的目录(要下载的文件):

服务器输出:“客户端连接的ip:
['runmeee.exe','Untitled.png','putty.exe','pyserver.py']
runmeee.exe
Untitled.png
putty.exe
pyserver.py“
客户端输出:runmee

我看到服务器打印启动,我看到客户端打印os.listdir的结果和下面的循环,但我不知道是谁发送命令?谁打印最后一个
runmee
(buggy)?我修复了6个字符的东西,这是因为客户端。但是,现在我只需要将服务器合并成一段数据,因为客户端只等待一段数据。在这种情况下,只需执行
sock.send(“\n.join(retval))
,而不必执行循环。您将在单个文本块中每行发送一个文件。蹩脚的连载,但工作。或者发送
str(retval)
并使用
ast.literal\u eval
将其反序列化到另一端的列表中。已修复!我只是合并成一行数据,我发现客户机正在打印数据[:6],而不仅仅是数据。
import socket
import threading
import os

def RetrFile(name, sock):
    filename = sock.recv(1024)
    if filename != "ls":
        if os.path.isfile(filename):
            sock.send("EXISTS " + str(os.path.getsize(filename)))
            userResponse = sock.recv(1024)
            if userResponse[:2] == 'OK':
                with open(filename, 'rb') as f:
                    bytesToSend = f.read(1024)
                    sock.send(bytesToSend)
                    while bytesToSend != "":
                        bytesToSend = f.read(1024)
                        sock.send(bytesToSend)
        else:
            sock.send("ERR ")

        sock.close()
    else:
       dir_path = os.path.dirname(os.path.realpath(__file__))
       retval = os.listdir(dir_path)
       print retval
    for ret in retval:
        print ret
        sock.send(ret)
def Main():
    host = '192.168.0.125'
    port = 5000

    s = socket.socket()
    s.bind((host,port))

    s.listen(5)

    print "Server Started."
    while True:
        c, addr = s.accept()
        print "client connedted ip:<" + str(addr) + ">"
        t = threading.Thread(target=RetrFile, args=("RetrThread", c))
        t.start()

    s.close()

if __name__ == '__main__':
    Main()
Server  Output: "client connedted ip:<('192.168.0.112', 49546)>

['runmeee.exe', 'Untitled.png', 'putty.exe', 'pyserver.py']

runmeee.exe

Untitled.png

putty.exe

pyserver.py"

Client output: runmee