私はJavaソケットにかなり慣れていないので、同じソケットを使用してデータを送受信するのに問題があります。
サーバーは Android デバイス上にあります。
ServerSocket listenSocket = null;
OutputStream dataOutStream = null;
Socket socket = null;
InputStream dataInputStream = null;
// Listen
System.out.println("Start listening");
try {
listenSocket = new ServerSocket(4370);
socket = listenSocket.accept();
System.out.println("Connection accepted");
dataInputStream = socket.getInputStream();
dataOutStream = socket.getOutputStream();
while (dataInputStream.read() != -1);
} catch (IOException e) {
e.printStackTrace();
close(listenSocket, socket);
return;
}
// Answer
System.out.println("Answering...");
byte[] answer = {(byte) 0x82, (byte) 0xf8, 0, 0};
try {
dataOutStream.write(answer);
} catch (IOException e) {
e.printStackTrace();
close(listenSocket, socket);
return;
}
close(listenSocket, socket);
System.out.println("Finished");
クライアントは、Java 6 を搭載した Linux マシンで実行されます。
Socket socket = new Socket("192.168.1.33", 4370);
OutputStream dataOutputStream = socket.getOutputStream();
InputStream dataInputStream = socket.getInputStream();
byte[] bufferOut = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
dataOutputStream.write(bufferOut);
System.out.println("Sent");
while (dataInputStream.read() != -1);
socket.close();
System.out.println("Finished");
ここでの問題は、サーバーがwhile (dataInputStream.read() != -1);
回線にスタックすることです。クライアントが送信を閉じないように見えます。
私がdataOutputStream.close()
クライアント部分で行うと(もちろん、書いた後)、それは機能しますが、クライアントwhile (dataInputStream.read() != -1);
はソケットが閉じられたと言って死んでしまいます。
閉じるコマンドが送信されるまで、この同じソケットを介してより多くのデータ交換を行うために、ソケット全体を開いたままにします。
私は明らかにここで何か間違ったことをしています、何か洞察はありますか? 前もって感謝します!