0

このコードから、Android 2.3.3.(Dell Streak) の PC でファイルを転送できますが、Android 4.2 (Samsung GS 3) で同じコードを実行しても何もしません。問題は、ソケットが初期化されるときだと思いますか? これを 4.2 で動作させるにはどうすればよいですか?

package com.hrandika.synchronizer.serverClient;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

import android.os.AsyncTask;
import android.util.Log;

public class Client {

File sendingFile;

public Client(File sendingFile) {
    Log.d("Client", "Cleint : Constructed");
    this.sendingFile = sendingFile;
}

public void send(String ip) {
    try {
        Log.d("Client", "Cleint stating ....");
        Socket socket = new Socket(ip, 5555);
        Log.d("Client", "Cleint Socket Okay");

        OutputStream outputStream = socket.getOutputStream();
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
                outputStream);

        Log.d("Client", "Cleint ready to sent");
        outputStreamWriter.write(sendingFile.getName() + "\n");
        outputStreamWriter.flush();
        Log.d("Client", "Cleint Sent");

        InputStream inputStream = socket.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(
                inputStream);

        BufferedReader bufferedReader = new BufferedReader(
                inputStreamReader);

        String serverResponse = bufferedReader.readLine();

        if (serverResponse.equals("READY")) {
            Log.d("Client", "Cleint : server ready");

            byte[] buffer = new byte[(int) sendingFile.length()];
            FileInputStream fileInputStream = new FileInputStream(
                    sendingFile);
            BufferedInputStream bufferedInputStream = new   BufferedInputStream(
                    fileInputStream);
            bufferedInputStream.read(buffer, 0, buffer.length);
            outputStream.write(buffer, 0, buffer.length);

            outputStream.flush();
            bufferedInputStream.close();
            fileInputStream.close();
            socket.close();

        }

    } catch (Exception e) {
    }
}



public class Sender extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... params) {
        send("192.168.43.21");
        return null;
    }

} 
} // End class Client
4

1 に答える 1

0

UI スレッドでネットワークを実行してはなりません。これは、Honeycomb 以降のプラットフォームによって強制されます。使い方が間違っていると思いますAsyncTask

必読:

更新:ネットワークエラーの時点で、開始adb shell(デバイスがUSB経由でPCに接続されていると想定)して入力しますtelnet 192.168.43.21 5555-この方法で、サーバーが実際に電話から到達可能かどうかを確認できます.

更新 2:チェックしたところ、telnetストック (root 化されていない) デバイスではバイナリが利用できません。ただし、このtelnet clientなど、特定の IP/ポートに接続できるアプリケーションであれば、テストには十分です。このようにして、独自のコードに触れる前に、セットアップの問題を解消できます。

于 2012-11-28T12:17:21.483 に答える