python for android: pad 从PC接收文件

本文介绍了一种不使用USB线在Windows PC与Android Pad间通过Wi-Fi传输文件的方法。利用Python编写的getfile.py脚本,可以在本地网络内实现文件的发送与接收。此方案适用于家庭无线网络环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果不用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 上测试通过.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值