Socket实现文件互传(二)

本文介绍了如何使用Socket在Android设备与PC间实现文件传输和远程命令控制。客户端通过Socket连接同一局域网下的PC,传输数据时利用Json区分文件和命令。服务端接收请求后,根据接收到的Json数据执行相应操作,包括文件传输和执行PC上的各种命令。项目源码已开源在GitHub。
摘要由CSDN通过智能技术生成

Socket实现文件传输(二)

         上次说了用Socket实现文件传输的前提工作,获取手机的各种资源文件,这篇就主要讲一下具体的实现过程,传输原理是基于Socket实现的。

         实现文件传输

        在拿到各种文件资源后(关于获取手机资源文件请参照我的上一篇博客获取手机文件资源),我们可以传输文件到电脑了,在传输文件之前先要连接设备,也就是在客户端连接到一台pc,Socket连接客户端和服务端必须在线程里面执行,

在点击连接设备后,启动新线程,执行Socket连接工作,在连接的时候有几点需要注意的,

1.      客户端和pc端必须在同一个局域网下;

2.      在连接时pc端需要关闭防火墙,不过我试过有时候不关也可以,但是最好还是关闭;

3.      在连接完成后Socket和流都要close掉,否则数据传不过去;代码如下:

package com.example.manager.Thread;
import android.util.Log;
import com.example.manager.Fragment.ConnectFragment;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.Socket;

/**
 * Created by Dangelo on 2016/5/20.
 */
public class SocketThread implements Runnable {
    private Socket socket;
    private String IP;
    private int port;

    public SocketThread(Socket socket, String IP, int port){
        this.socket = socket;
        this.IP = IP;
        this.port = port;
    }

    @Override
    public void run() {
        try {
            socket = new Socket(IP, port);
            ConnectFragment.connectHandler.sendEmptyMessage(0x000);
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            writer.close();
            socket.close();
        } catch (Exception e) {
            Log.e("Socket Error", e.toString());
            ConnectFragment.connectHandler.sendEmptyMessage(0x111);
        }
    }
}

到这客户端连接pc的工作基本上就完成了。接下来就是服务端的任务了。启动服务端,在接收到客户端的请求之后连接到客户端,这下就能够传文件到pc了,在做这个项目的时候我在传文件的基础上还附加了一些传输命令功能,可以在客户端直接控制pc执行一些操作,像常用的电源,音量,亮度,鼠标控制等等,这些操作方便了对pc的控制。



在传输文件和命令时需要区分它们的类别,我用的是Json数据来处理的,如果接收到的是command就执行命令操作,再根据后续的具体命令去执行具体的操作,如果是file就执行传文件操作。这样在处理数据的时候就很容易了,启动后连接成功拿到当前传过来的字符串,先判断是传输文件还是传输命令,如果有“command”键就执行命令操作,并且拿到当前的命令类型,执行对应操作,代码如下:

static ServerSocket ss = null;

    public void run() {
        try {
            ss = new ServerSocket(30000);
            System.out.println("服务端创建成功!");
            while(true) {
                Socket socket = ss.accept();
                System.out.println("客户端连接成功!");
                System.out.println(socket.getLocalSocketAddress());
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                StringBuilder str = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    str.append(line);
                }
                if(str.toString().equals("")){
                    continue;
                }
                JSONObject jsonObject = new JSONObject(str.toString());
                if(jsonObject.has("command")) {                     //传输命令
                    switch (jsonObject
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值