私はJavaで簡単なサーバーアプリケーションを実装しようとしています。
それが行うのは、tcp / ipのメッセージを読み取り、それを文字列として保存することだけです。これが私のコードです。
try{
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException e) {
System.out.println("cannot open input buffer");
System.exit(-1);
}
clientSocket.setSoTimeout(5000);
//read first bit of message
message = in.readLine();
System.out.println(message);
//as message is an undefined length we need to loop and check for the springer miller
//end mark /Request
while(message.contains("/Request") == false )
{
try {
message = in.readLine();
System.out.println(message);
}
catch (IOException e) {
System.out.println("cannot open input buffer");
System.exit(-1);
}
}
//reply
out.println(outputLine);
私が抱えている問題は、メッセージにEOFが含まれていないように見えることです。それは私が私のものに翻訳している別の会社のプロトコルです、それは私がメッセージにEOFを追加することができないようにプログラムの目的です
プログラムを実行した場合に取得できる情報は次のとおりです。
POST / HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: http://htng.org/1.1/Listener.Wsdl#ReceiveMessageAsync
User-Agent: Java/1.6.0_24
Host: 192.168.0.32:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 3009
次に、メッセージ本文を読み取る必要があるときにハングします。
私はこれまでJavaを使用したことがなく、自分のEOFを検出するために読み取られたバイナリソケットを書きたくありません。
x秒間読んでから戻る方法はありますか
助けてくれてありがとう。
PSはすでにC++でプログラムを正常にビルドしていますが、宛先のマシンが不明であるため、Javaに移植する必要があります。