Отправить изображение с сервера на клиент и с клиента на сервер

Клиент отправляет файл на сервер, а сервер получает и сохраняет его. Но когда в клиенте эта строка (while ((len = outputFromServer.read(buf))!= -1)) застревает в клиенте, я не знаю почему? пытаться {

            Log.d(WiFiDirectActivity.TAG, "Opening client socket - ");

            socket.connect((new InetSocketAddress(host, port)),
                    SOCKET_TIMEOUT);

            final File f = new File(
                    Environment.getExternalStorageDirectory()
                            + "/wifip2pshared-"
                            + System.currentTimeMillis() + ".jpg");

            File dirs = new File(f.getParent());
            if (!dirs.exists())
                dirs.mkdirs();
            f.createNewFile();

            // send Data To Server
            OutputStream stream = socket.getOutputStream();
            FileInputStream file = new FileInputStream(
                    "/sdcard/samsung/Image/001" + ".jpg");
            while ((len1 = file.read(buf1)) != -1) {
                stream.write(buf1, 0, len1);
            }
            file.close();
            // ////////////////////////////////
            // ///////////////////////
            // read Data from server
            InputStream outputFromServer = socket.getInputStream();
            FileOutputStream saveData = new FileOutputStream(
                    f);
            while ((len = outputFromServer.read(buf)) != -1) {
                saveData.write(buf, 0, len);
            }
            saveData.close();

            Log.d(WiFiDirectActivity.TAG, "Client: Data written");
        } catch (IOException e) {
            Log.e("exception at client", e.getMessage());
        } finally {
            if (socket != null) {

                if (socket.isConnected()) {
                    try {
                        socket.close();
                    } catch (Exception e) {
                        // Give up
                        Log.e("exception at clientin socket close",
                                e.toString());
                    }
                }
            }
        }

Сторона сервера

try {
            server = new ServerSocket(8988);
            Socket client = server.accept();
            final File f = new File(
                    Environment.getExternalStorageDirectory()
                            + "/wifip2pshared-"
                            + System.currentTimeMillis() + ".jpg");

            File dirs = new File(f.getParent());
            if (!dirs.exists())
                dirs.mkdirs();
            f.createNewFile();

            // receive Data From Client
            InputStream is = client.getInputStream();
            FileOutputStream fos = new FileOutputStream(f);
            String a = "acb";
            while ((len = is.read(buf)) != -1) {
                fos.write(buf, 0, len);
                Log.e("In server reviving data", a);
            }
            fos.close();
            // Send Data To Client
            OutputStream stream = client.getOutputStream();

            FileInputStream file = new FileInputStream(
                    "/sdcard/samsung/Image/001" + ".jpg");
            while ((len1 = file.read(buf1)) != -1) {
                stream.write(buf1, 0, len1);
            }
            file.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

клиент отправляет файл на сервер, а сервер получает и сохраняет его. Но когда в клиенте эта строка (while ((len = outputFromServer.read(buf))!= -1)) застревает в клиенте, я не знаю почему?

1 ответ

Решение

read() в потоке сокета вернет -1, только если соединение закрыто или произошла ошибка. Сервер получает данные и сохраняет их, но никогда не покидает цикл приема для отправки данных. Даже если это сделает клиент, он также не выйдет из цикла приема.

Вы должны либо закрыть соединение, либо отправить размер файла до того, как фактический файл и прием прекратится, когда будет прочитан указанный размер.

Другие вопросы по тегам