Estoy creando una aplicación que requiere socket para enviar archivos de uno a otro Bueno, puedo enviar y recibir con éxito cualquier archivo de un dispositivo a otro, pero el problema es que mi conexión de socket se cierra automáticamente después de la transferencia de archivos . También intenté eliminar socket.close() de ambos lados, pero aún se cierra.

Aquí está el código del servidor

            try {

                OutputStream os = socket.getOutputStream();
                DataOutputStream dos = new DataOutputStream(os);
                dos.writeInt(files.size());
                dos.flush();

                for(int i = 0 ; i < files.size();i++){
                    dos.writeUTF(files.get(i).getName());
                    dos.flush();
                }

                int n = 0;
                byte[]buf = new byte[4092];
                for(int i =0; i < files.size(); i++){
                    if (name == null){
                        dos.writeUTF(files.get(i).getName());
                    }else {
                        dos.writeUTF(filesName.get(i) + ".apk");
                    }
                    dos.writeLong(files.get(i).length());
                    FileInputStream fis = new FileInputStream(files.get(i));

                    while((n =fis.read(buf)) != -1){
                        dos.write(buf,0,n);
                        dos.flush();
                    }
                }
                dos.close();


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

Y aquí está el código del cliente.

               try {
                socket = new Socket(dstAddress, dstPort);
                bufferSize = socket.getReceiveBufferSize();
                in = socket.getInputStream();
                DataInputStream dis = new DataInputStream(in);
                DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
                int number = dis.readInt();
                ArrayList<File>files = new ArrayList<File>(number);
                for(int i = 0; i< number;i++){
                    File file = new File(dis.readUTF());
                    files.add(file);
                }
                int n = 0;
                byte[]buf = new byte[4092];
                for(int i = 0; i < files.size();i++){
                    int fileeesizee = 0;
                    publishProgress(String.valueOf(0));
                    String filename = dis.readUTF();
                    long fileSize = dis.readLong();
                    recyclername.add(filename);
                    recyclersize.add(android.text.format.Formatter.formatFileSize(test2.this, fileSize));
                    recyclerimg.add(filename);
                    final File f = new File(Environment.getExternalStorageDirectory()+"/SharePlus/.data/"+filename);
                    FileOutputStream fos = new FileOutputStream(f);
                    while (fileSize > 0 && (n = dis.read(buf, 0, (int)Math.min(buf.length, fileSize))) != -1)
                    {
                        fos.write(buf,0,n);
                        fileSize -= n;
                        fileeesizee+=n;
                        if (fileSize==0){
                        }else{
                            publishProgress(""+(int)((fileeesizee * 100) / fileSize));
                        }
                    }
                    fos.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
                Log.d("d", "1 catch = " + e.getMessage());

                final String eMsg = "Something wrong: " + e.getMessage();
                test2.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(test2.this, eMsg, Toast.LENGTH_LONG).show();
                    }
                });

            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        Log.d("d", "2 catch = " + e.getMessage());
                        e.printStackTrace();
                    }
                }
            }
0
Divyansh Kumar 29 ago. 2020 a las 09:23

1 respuesta

La mejor respuesta

dos.close ();

Cerrar una corriente también cierra el enchufe.

0
blackapps 29 ago. 2020 a las 09:49