我正在尝试在 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,因为目标机器未知。