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