将目录内容发送到客户端 - python套接字

时间:2015-11-23 09:14:01

标签: python sockets

我正在尝试将c:驱动器的内容发送回客户端。我正在使用os.listdir()函数生成列表但是当我将它发送回客户端并尝试打印时,我什么也得不到。如何打印我为os.listdir()获取的列表?

这是我的客户代码:

import socket
import sys
import os

HOST = 'localhost' 
PORT = 8082 
size = 1024

def ls():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((HOST,PORT))
    s.send(userInput)
    result = s.recv(size)
    print result
    s.close()
    return

def put(commandName):
    socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket1.connect((HOST, PORT))
    socket1.send(commandName)
    string = commandName.split(' ', 1)
    inputFile = string[1]
    with open(inputFile, 'rb') as file_to_send:
        for data in file_to_send:
            socket1.sendall(data)
    print 'PUT Successful'
    socket1.close()
    return


def get(commandName):
    socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket1.connect((HOST, PORT))
    socket1.send(commandName)
    string = commandName.split(' ', 1)
    inputFile = string[1]
    with open(inputFile, 'wb') as file_to_write:
        while True:
            data = socket1.recv(1024)
            print data
            if not data:
                break
            print data
            file_to_write.write(data)
    file_to_write.close()
    print 'GET Successful'
    #socket1.close()
    return

done = False
while not done:
    userInput = raw_input()
    if "quit" == userInput:
        done = True
    elif "ls" == userInput:
       ls()
    else:
        string = userInput.split(' ', 1)
        if (string[0] == 'put'):
            put(userInput)
        elif (string[0] == 'get'):
            get(userInput)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((HOST,PORT))
    s.send(userInput) 
    data = s.recv(size) 
    s.close() 
    print 'Received:', data'

服务器代码:

import socket
import os
import sys

host = '' 
port = 8082 
backlog = 5 
size = 1024

serverID = socket.gethostbyname(socket.gethostname())
info = 'SERVER ID: {} port: {}'.format(serverID, port)
print info

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog)
done = False

# Loop until client sends 'quit' to server
while not done: 
    client, address = s.accept() 
    data = client.recv(size)

    print "Server received: ", data
    if data: 
        client.send("Server Says... " + data)
    if data == "quit":
        done = True
    elif data == "ls":
       data = os.listdir("C://")
       client.send(data[0])
    else:
        string = data.split(' ', 1)
        dataFile = string[1]

        if (string[0] == 'put'):
            with open(dataFile, 'wb') as file_to_write:
                while True:
                    data = client.recv(1024)
                    if not data:
                        break
                    file_to_write.write(data)
                    file_to_write.close()
                    break
            print 'Receive Successful'
        elif (string[0] == 'get'):
            with open(dataFile, 'rb') as file_to_send:
                for data in file_to_send:
                    client.send(data)
            print 'Send Successful'

    client.close()
s.close()
print "Server exiting."

0 个答案:

没有答案