Я пытаюсь разработать класс, который позволяет мне запускать сокет в потоке и который в любое время позволяет мне отправлять через него данные, а также получать уведомления, когда данные поступают.Он не должен предполагать никаких вещей, таких как получение сообщения только после того, как он отправил сообщение первым и т. Д. По какой-то причине следующий код печатает ответ только для первого запроса:
public static void main(String[] args) throws IOException {
TCPClient client = new TCPClient(new TCPClientObserver());
client.connect("www.microsoft.com", 80);
sleep(1000);
client.send("HTTP GET");
sleep(5000);
client.send("XYZ");
}
печать
echo: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
echo: <HTML><HEAD><TITLE>Bad Request</TITLE>
echo: <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
echo: <BODY><h2>Bad Request - Invalid URL</h2>
echo: <hr><p>HTTP Error 400. The request URL is invalid.</p>
echo: </BODY></HTML>
Вот основная логика сокета:
echoSocket = new Socket("www.microsoft.com", 80);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
while (true) {
String response = in.readLine();
if (response != null)
System.out.println("echo: " + response);
}
Я думаю, проблема заключается в моем цикле?
Полный тестовый код моего приложения можно увидетьздесь: http://codepad.org/bmHwct35
Спасибо