1

2台のAndroidデバイス間の通信を確立したい. サーバーからクライアントへ (サーバーを介して) 方法論を使用します。したがって、一般的に、ファイルをサーバー(PC)に送信してから、サーバー上のファイルを取得して他のデバイスに送信することを考えていました。それで、私は2番目の部分に取り組んでいて、PCからAndroidにファイルを送信しようとしていました. しかし、何らかの理由でクライアントがサーバーに接続できません。これが私のコードです。

public class TCPServer extends Thread {

public static final int SERVERPORT = 8901;

public static void main() {

    try {
        System.out.println("S: Connecting...");

        ServerSocket serverSocket = new ServerSocket(SERVERPORT);
        System.out.println("S: Socket Established...");

        Socket client = serverSocket.accept();
        System.out.println("S: Receiving...");

        ObjectOutputStream put = new ObjectOutputStream(
                client.getOutputStream());

        String s = "adios.wav";
        String str = "C:/";
        String path = str + s;
        System.out.println("The requested file is path: " + path);
        System.out.println("The requested file is : " + s);
        File f = new File(path);
        if (f.isFile()) {
            FileInputStream fis = new FileInputStream(f);

            byte[] buf = new byte[1024];
            int read;
            while ((read = fis.read(buf, 0, 1024)) != -1) {
                put.write(buf, 0, read);
                put.flush();
            }

            System.out.println("File transfered");
            client.close();
            serverSocket.close();
            fis.close();
        }

    } catch (Exception e) {
        System.out.println("S: Error");
        e.printStackTrace();
    } finally {

    }
}
}

そしてクライアント。

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Socket s = null;
    BufferedInputStream get = null;

    try {
        s = new Socket("192.168.198.1", 8901);
        get = new BufferedInputStream(s.getInputStream());

        int u;

        String str = "/mnt/sdcard/ad.wav";
        FileOutputStream fs = new FileOutputStream(new File(str));
        byte jj[] = new byte[1024];
        while ((u = get.read(jj, 0, 1024)) != -1) {
            fs.write(jj, 0, u);
        }
        fs.close();
        System.out.println("File received");
        s.close();
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
    }
}
}
4

1 に答える 1

2

クライアント部分は機能しないと思います。

別のスレッドまたは AsyncTask でソケット処理を行う必要があります。

例えば:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        new doitAsync().execute();
    }

   class doitAsync extends AsyncTask<Void, Integer, Integer>
   {

       @Override
       protected void onPostExecute(Integer result)
       {
           if (result == -1)
           {
               System.exit(0);
           }
       }

       @Override
       protected Integer doInBackground(Void... params)
       {
           Socket s = null;
           BufferedInputStream get = null;

           try {
               s = new Socket("192.168.198.1", 8901);
               get = new BufferedInputStream(s.getInputStream());

               int u;

               String str = "/mnt/sdcard/ad.wav";
               FileOutputStream fs = new FileOutputStream(new File(str));
               byte jj[] = new byte[1024];
               while ((u = get.read(jj, 0, 1024)) != -1) {
                   fs.write(jj, 0, u);
               }
               fs.close();
               System.out.println("File received");
               s.close();
           } catch (Exception e) {
               e.printStackTrace();
               return -1; // failed
           }
           return 0;
       }

また、

onProgressUpdate() 

アプリケーションがフリーズしているように見えないように進行状況バーを更新する場合は、asynctask の

于 2013-05-12T17:42:40.580 に答える