0

Androidデバイスであるサーバー側のファイルにオーディオを録音し、録音が完了したら別のAndroidデバイスであるクライアントに送信しようとしています。最初は正常に動作しますが、再度記録すると、クライアントが 2 番目の記録を受信しません。これが私のコードです

サーバースレッド:

public class ServerThread implements Runnable {

    public void run() {
        try {
            if (SERVERIP != null) {
                serverSocket = new ServerSocket(SERVERPORT);
                while (true) {
                    client = serverSocket.accept();
                    OutputStream out = client.getOutputStream();
                    while(true){
                        //record status is true 
                        //when record is done
                        if(record_status){
                            try {
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(mFileName)));
                                BufferedOutputStream bout = new BufferedOutputStream(out);
                                copyFile(bis, bout);
                                bout.flush();
                            } catch (FileNotFoundException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            record_status = false;
                        }
                    }
                }
            }
        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

クライアントスレッド:

    public class ClientThread implements Runnable {

    public void run() {
        try {
            InetAddress serverAddr = InetAddress.getByName(SERVERIP);
            Socket socket = new Socket(serverAddr, SERVERPORT);
            connected = true;
            while (connected) {
                try {
                    dis = socket.getInputStream();
                    while(true){
                        if(dis.available()>0){
                        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(mFileName)));
                        copyFile(socket.getInputStream(), bos);
                        bos.flush();
                        //file has been received
                        //start playing the audio
                        startPlaying();
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            socket.close();
        } catch (Exception e) {
            connected = false;
        }
    }
}

メソッド copyFile:

    public static boolean copyFile(InputStream inputStream, OutputStream out) {
    byte buf[] = new byte[4092];
    int len;
    try {
        while ((len = inputStream.read(buf)) != -1) {
            out.write(buf, 0, len);

        }
        out.close();
        inputStream.close();
    } catch (IOException e) {

        return false;
    }
    return true;
}
4

1 に答える 1

0

これは本当にコメントである必要がありますが、まだ担当者がいません。しかし、サーバー側では、ストリームがクライアントに送信されると、while ループの最初の繰り返しで record_status が true に設定され、record_status が false に設定され、while ループ内で実際に true に設定されることはないように思えます。その結果、if ステートメント内のコードが再度実行されることはありません。では、record_status が再び true に設定されるのはどこでしょうか? サーバー側デバイスの logcat をチェックして、これが問題でない場合は、2 番目の記録のビットストリームに実際に何かが入れられているかどうかを確認します。

于 2013-03-20T20:54:37.943 に答える