私はJavaが初めてなので、助けが必要です。onClick が文字列をサーバーに送信し、サーバーがソケットを使用して画像を返す必要があるアプリケーションを作成しています。したがって、私のクライアント側は Android で、サーバー側は PC - Java です。私のサーバー側は問題ないと思います (彼はすべての system.out.print コマンドを出力するため) が、クライアント側は良くありません。どこが間違っているのか教えてください。ありがとう!
これが私のサーバー(PC)側のコードです(ソケットは関数パラメーターを介して配信されます):
try {
dataInputStream = new DataInputStream(socket.getInputStream());
poruka = "" + dataInputStream.readUTF();
System.out.print(poruka);
int bytecount = 2048;
byte[] buf = new byte[bytecount];
OutputStream OUT = socket.getOutputStream();
BufferedOutputStream BuffOUT = new BufferedOutputStream(OUT, bytecount);
FileInputStream in = new FileInputStream("screenShot.jpg");
int i = 0;
while ((i = in.read(buf, 0, bytecount)) != -1) {
BuffOUT.write(buf, 0, i);
System.out.print("check" + buf[0]);
BuffOUT.flush();
}
in.close();
BuffOUT.close();
System.out.print("over");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ここに私のクライアント(Android)側があります:
Socket socket = null;
DataOutputStream dataOutputStream = null;
try {
socket = new Socket(IPadresa, 8888);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
slanje = "hy string";
dataOutputStream.writeUTF(slanje);
FileOutputStream outToFile = new FileOutputStream("slika.jpg");
int bytecount = 2048;
byte[] buf = new byte[bytecount];
InputStream IN = socket.getInputStream();
BufferedInputStream BuffIN = new BufferedInputStream(IN, bytecount)
int i = 0;
int filelength = 0;
while((i = BuffIN.read(buf, 0, bytecount)) != -1) {
filelength += i;
outToFile.write(buf, 0, i);
outToFile.flush();
}
IN.close();
BuffIN.close();
dataOutputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
詳細情報: サーバー側では、クライアントから送信された文字列を確認できます。そして、その System.out.print("over"); があります。文字列をサーバーに送信するたびにコマンドが出力されます。また、私は System.out.print("check" + buf[0]); を持っています。サーバーから何度も印刷されます。そのため、クライアント側に問題があると思います。
そして、私のクライアント側は例外をスローしません...しかし、クライアント側がwhileループを通過していないことに気付きました。そこで引っかかる。