2013-06-16 1 views
0

клиент отправляет файл на сервер, а сервер его получает и сохраняет. Но когда в клиенте эта строка (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()); 
        } 
       } 
      } 
     } 

Server Side

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 только в случае закрытия соединения или возникновения ошибки. Сервер принимает данные и сохраняет их, но никогда не оставляет петлю приемника для отправки данных. Даже если это сделает клиент, он не покинет цикл приемника.

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

+0

thnx ... Брат ...... я решил свою проблему из-за ура намек ... еще раз спасибо .... –