Blue Ice
Blue Ice

Reputation: 7930

Does File Exist on Client Python TCP server

I am trying to make a TCP port server in python. Here is my code so far:

import socket 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.bind(('',4000)) 
sock.listen(1) 

while 1: 
    client, address = sock.accept() 
    fileexists = client.RUNCOMMAND(does the file exist?)

    if fileexists = 0:
           client.close()
    else if: 
        filedata = client.RUNCOMMAND(get the contents of the file)

        if filedata = "abcdefgh":
              client.send('Transfer file accepted.')
        else:
              client.send('Whoops, seems like you have a corrupted file!')

    client.close()

I just have no idea how to run a command (RUNCOMMMAND) that would check if a file exists on the client. Also, is there a way to check what operating system the client is on to run different commands (eg. linux will have a file finder different command than windows). And I totally understand if this isn't possible, but I am really hoping that there is a way to do this.

Thank you very much.

Upvotes: 0

Views: 672

Answers (2)

Peter Moore
Peter Moore

Reputation: 2126

You might want to look at the very handy bottle.py micro server. its great for small server tasks like this and you get the Http protocol on top of this. You just include one file with your code. http://bottlepy.org

here is code that will work from http://blah:8090/get/file or http://blah:8090/exists/file so to see the contents of /etc/hosts would be http://blah:8090/get/etc/hosts

#!/usr/bin/python
import bottle 
import os.path


@bottle.route("/get/<filepath:path>")
def index(filepath):
    filepath = "/" + filepath
    print "getting", filepath 
    if not os.path.exists(filepath):
        return "file not found"

    print open(filepath).read() # prints file 
    return '<br>'.join(open(filepath).read().split("\n")) # prints file with <br> for browser readability

@bottle.route("/exists/<filepath:path>")
def test(filepath):
    filepath = "/" + filepath
    return str(os.path.exists(filepath))


bottle.run(host='0.0.0.0', port=8090, reloader=True)

the reloader option on the run method allows you to edit the code without manually restarting the server. Its quite handy.

Upvotes: 0

Yarkee
Yarkee

Reputation: 9424

XMLRPC may help you. XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. http://docs.python.org/2/library/xmlrpclib.html

Upvotes: 1

Related Questions