0

クライアント側で次のことができるようにしたい:

  • ソケットを開く
  • データを送る
  • 待って
  • より多くのデータを送信

そしてサーバー側:

  • msocketを開く
  • データを受信する
  • 待って
  • キープレシビエン(ループオーバーアンドオーバー)

現在、ループさせることはできません:(

私はクライアント側を持っています:

コンストラクター:

s = new Socket(ServerIPAddr, 6100);
out = new ObjectOutputStream(s.getOutputStream());

ループ機能:

    public void sendImage(BufferedImage image){

    System.out.println("Starting to send");
    try {

        ImageIO.write(image, "PNG", out);
        System.out.println("Sent");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // png is lossless

}

これは、次々に何度も呼び出すことができます。

サーバー側にはコンストラクターがあります:

    public ServerConnectionThread(Socket clientSocket) {current = clientSocket;}

実行機能:

    public void run() {
    int i = 0;
    System.out.println("Connection accepted");
    System.out.println("Threaded spanwed");
    try {ObjectInputStream in = new ObjectInputStream(current.getInputStream());
        while (capturing) {
            ImageIO.write(ImageIO.read(in), "PNG", new File("test" + i++
                    + ".png"));
            in.close();
        }
    } catch (IOException e) {e.printStackTrace();}

}

送信された最初のデータに対してのみ機能する理由を知っている人はいますか? そして、継続的に送信することを拒否しますか?

-アップデート-

while (capturing) {
            BufferedImage b = ImageIO.read(in);
            if(b == null){
                continue;
            }
            ImageIO.write(b, "PNG", new File("test" + i++
                    + ".png"));

        }

この問題を修正するようです

4

1 に答える 1

2

inputStream を閉じているのはなぜですか?

これを試して -

 while (capturing) {
            ImageIO.write(ImageIO.read(in), "PNG", new File("test" + i++ ".png"));
            //in.close();
      }
于 2013-04-21T12:40:18.920 に答える