您的位置:首页 > 编程语言 > Python开发

python for android: pad 从PC接收文件

2013-12-29 14:39 471 查看
如果不用USB线, pad 怎样从PC接收文件 ? 我在家用无线路由器, pad 用WiFi 连网.

Windows PC 上先启动服务程序 getfile.py -mode server

import sys, os, thread, time
from socket import *
def now(): return time.strftime('%Y-%m-%d %X',time.localtime())

bufsz = 1024
defaultHost = 'localhost'
defaultPort = 55555
path = '/python4android/'
helptext = """
Usage...
server=> getfile.py  -mode server            [-port nnn] [-host hhh|localhost]
client=> getfile.py [-mode client] -file fff [-port nnn] [-host hhh|localhost]
"""

def parsecommandline( ):
dict = {}                        # put in dictionary for easy lookup
args = sys.argv[1:]              # skip program name at front of args
while len(args) >= 2:            # example: dict['-mode'] = 'server'
dict[args[0]] = args[1]
args = args[2:]
return dict

def client(host, port, filename):
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((host, port))
sock.send(filename + '\n')                 # send remote name with dir
file = open(filename, 'wb')                 # create local file in cwd
while True:
data = sock.recv(bufsz)                # get up to 1K at a time
if not data: break                     # till closed on server side
file.write(data)                       # store data in local file
sock.close( )
file.close( )
print 'Client get', filename, 'at', now( )

def serverthread(clientsock):
global path
sockfile = clientsock.makefile('r')          # wrap socket in dup file obj
filename = sockfile.readline( )[:-1]        # get filename up to end-line
dropdir =  path + os.path.split(filename)[1]
try:
file = open(dropdir, 'rb')
while True:
bytes = file.read(bufsz)           # read/send 1K at a time
if not bytes: break                # until file totally sent
sent = clientsock.send(bytes)
assert sent == len(bytes)
file.close()
print 'download file :', dropdir
except:
print 'Error download file on server:', filename
clientsock.close( )

def server(host, port):
serversock = socket(AF_INET, SOCK_STREAM)     # listen on TCP/IP socket
serversock.bind((host, port))                 # serve clients in threads
serversock.listen(5)
while True:
clientsock, clientaddr = serversock.accept( )
print 'Server connected by', clientaddr, 'at', now( )
thread.start_new_thread(serverthread, (clientsock,))

def main(args):
host = args.get('-host', defaultHost)         # use args or defaults
port = int(args.get('-port', defaultPort))    # is a string in argv
if args.get('-mode') == 'server':             # None if no -mode: client
if host == 'localhost':
name = gethostname()
host = gethostbyname(name)     # else fails remotely
print host,port
server(host, port)
elif args.get('-file'):                       # client mode needs -file
client(host, port, args['-file'])
else:
print helptext

if __name__ == '__main__':
args = parsecommandline( )
main(args)


cmd 用 ipconfig 看PC的IP地址.

android pad 运行 getfile1.py

# -*- coding: utf8 -*-
import android
import sys, os, time
from socket import *
def now(): return time.strftime('%Y-%m-%d %X',time.localtime())

droid = android.Android()
filename = droid.dialogGetInput(u"从PC接收文件",u"请输入文件名:").result
print filename

bufsz = 1024
host = '192.168.0.103'
port = 55555
path = '/mnt/sdcard/sl4a/scripts/'

sock = socket(AF_INET, SOCK_STREAM)
sock.connect((host, port))
sock.send(filename + '\n')                 # send remote name with dir
file = open(path+filename, 'wb')                 # create local file in cwd
while True:
data = sock.recv(bufsz)                # get up to 1K at a time
if not data: break                     # till closed on server side
file.write(data)                       # store data in local file
sock.close( )
file.close( )
print 'Client get', filename, 'at', now( )
在android 4.1 pad 上测试通过.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: