Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法通过android中的套接字发送多个文件_Java_Android_Sockets_Io - Fatal编程技术网

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

Java 无法通过android中的套接字发送多个文件,java,android,sockets,io,Java,Android,Sockets,Io,我正在尝试将音频录制到服务器端的一个文件中,这是一个android设备,录制完成后将其发送到另一个android设备客户端。它第一次工作正常,但当我再次录制时,客户端没有收到我的第二条记录。这是我的密码 服务器线程: public class ServerThread implements Runnable { public void run() { try { if (SERVERIP != null) { se

我正在尝试将音频录制到服务器端的一个文件中,这是一个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;
        }
    }
}
方法复制文件:

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

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

record_状态设置为true每次我停止录制时,private void stopRecording(){mRecorder.stop();mRecorder.release();record_status=true;}这到底在哪里?它不在任何张贴的代码中吗?您是如何执行ServerThread的(是在调用stopRecording的同一个线程中)?您是否按照建议检查了logcat,以查看您的服务器是否确实在为第二次录制发送任何数据?因为我怀疑它是我用来录制和播放的,所以服务器会录制,当录制停止时,会调用stopRecording()方法,其中record_status设置为true,它会将文件发送给客户端,客户端会播放收到的文件。@kader LogCat您知道这是什么吗?正在发送第二个文件吗。。。你所说的正在发生,显然不是,否则它会起作用!您链接的代码甚至不包含record_状态变量,而是要在一台机器上以一个线程的方式执行。你怎么称呼你的服务器线程?如果看不到你的代码或logcat输出,我无法帮助你,我肯定不会为你编写应用程序发布一些logcat结果,或你的实际代码(不是谷歌的,你正在尝试修改)