Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> python for android: pad 從PC接收文件

python for android: pad 從PC接收文件

編輯:關於Android編程

如果不用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)
        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
        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 運行 getfile.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 上測試通過.



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved