2012-04-11 3 views
0

バイト配列を送信する電話からの接続を受け付けるプログラムがありますが、実際に何かを受け取っていることをどのように知っていますか?どのようなものがソケットを介して送信されている場合、どのように私は "見る"ことができます。下の私のコードから、私は結果ファイル "saved.jpg"を作成することができません。それは何も受け取らなかったということですか?もう一方の端がソケットを閉じた場合ソケットを介してバイト配列を受け取る

public class wpsServer { 

    //vars 
    private int svrPort = 3334; 
    private ServerSocket serverSocket; 
    private Image image = null; 

    public wpsServer() 
    { 
     try { 
      serverSocket = new ServerSocket(svrPort); 
      System.out.println("Server started on "+svrPort); 
     } 
     catch (IOException e) { 
      System.out.println("Could not listen on port: "+svrPort); 
      System.exit(-1); 
     } 
    } 

    public void listenForClient() 
    { 
     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
      if(clientSocket.isConnected()) 
       System.out.println("Connected"); 

      byte[] pic = getPicture(clientSocket.getInputStream()); 
      InputStream in = new ByteArrayInputStream(pic); 
      BufferedImage image = ImageIO.read(in); 
      File outputfile = new File("saved.jpg"); 
      ImageIO.write(image, "jpg", outputfile); 

     } 
     catch (IOException e) { 

      System.out.println("Accept failed: "+svrPort); 
      System.exit(-1); 
     } 

    } 

    public byte[] getPicture(InputStream in) { 
      try { 
      ByteArrayOutputStream out = new ByteArrayOutputStream(); 
      byte[] data = new byte[1024]; 
      int length = 0; 
      while ((length = in.read(data))!=-1) { 
       out.write(data,0,length); 
      } 
       return out.toByteArray(); 
      } catch(IOException ioe) { 
      //handle it 
      } 
      return null; 
     } 

} 

答えて

0

in.readコールは-1を返します。ソケットが生きている間、そのデータはより多くのデータが利用可能になるまでブロックされます。

"プロトコル"を変更するだけです。まず、クライアントが配列サイズを送信してから、データを送信する必要があります。サーバーはその長さを読み取って、完了したらファイルの読み込みを停止する必要があります(たとえば、次のファイルを待つことに戻ります)。

関連する問題