0

我正在尝试在 python 中创建一个 TCP 端口服务器。到目前为止,这是我的代码:

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()

我只是不知道如何运行一个命令(RUNCOMMMAND)来检查客户端上是否存在文件。此外,有没有办法检查客户端在哪个操作系统上运行不同的命令(例如,linux 将有一个与 windows 不同的文件查找器命令)。如果这不可能,我完全理解,但我真的希望有办法做到这一点。

非常感谢你。

4

2 回答 2

1

XMLRPC 可能会对您有所帮助。XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为传输。 http://docs.python.org/2/library/xmlrpclib.html

于 2013-03-20T03:41:01.063 回答
0

你可能想看看非常方便的 bottle.py 微型服务器。它非常适合像这样的小型服务器任务,并且您可以在此之上获得 Http 协议。您只需在代码中包含一个文件。http://bottlepy.org

这里的代码可以http://blah:8090/get/file 用来http://blah:8090/exists/file查看 /etc/hosts 的内容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)

run 方法上的 reloader 选项允许您在不手动重新启动服务器的情况下编辑代码。它非常方便。

于 2013-03-22T06:35:11.710 回答