无法通过android中的套接字发送多个文件

时间:2013-03-20 20:37:02

标签: java android sockets io

我正在尝试将音频录制到服务器端的文件中,这是一个Android设备并将其发送到客户端,当记录完成时另一个Android设备。它第一次工作正常,但是当我再次录制时,客户端没有收到我的第二条记录。这是我的代码

服务器线程:

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;
}

1 个答案:

答案 0 :(得分:0)

这真的应该是一个评论,但我还没有代表。但在我看来,在服务器端,一旦将流发送到客户端,你就会在while循环的第一次迭代中将record_status设置为true,然后将record_status设置为false,并且在while循环内再次实际上不再设置为true。因此,if语句中的代码永远不会再次执行。那么record_status又在哪里被设置为true?检查服务器端设备上的logcat,看看是否有任何内容实际放入第二次录制的比特流中,如果不是这是你的问题