クライアント側で次のことができるようにしたい:
- ソケットを開く
- データを送る
- 待って
- より多くのデータを送信
そしてサーバー側:
- 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"));
}
この問題を修正するようです