Я пытаюсь изучить сокеты, используя Java, и успешно отправил данные на ServerSocket, работающий на моем собственном компьютере. Когда я пытаюсь читать из этого сокета, используя readline (чтобы я мог просто повторить свое собственное отправленное сообщение), моя программа зависает и не возвращается.
Вот код:
public static void main(String[] args) throws UnknownHostException, IOException {
TCPClient cli = new TCPClient("127.0.0.1", "15000");
try {
cli.ostream.writeUTF("Teste");
String echo = cli.istream.readLine(); //it hangs in this line
System.out.println(echo);
}
TCPClient - это класс, который я определил, поэтому я могу протестировать свою программу на более простом интерфейсе, прежде чем использовать Swing на своей рабочей станции. вот код:
public class TCPClient {
public DataOutputStream ostream = null;
public BufferedReader istream = null;
public TCPClient(String host, String port) throws UnknownHostException {
InetAddress ip = InetAddress.getByName(host);
try {
Socket socket = new Socket(host, Integer.parseInt(port));
ostream = new DataOutputStream(socket.getOutputStream());
istream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException ex) {
Logger.getLogger(TCPClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
Мой сервер довольно прост. После того, как соединение установлено, оно входит в этот цикл и остается здесь, пока я не закрою клиент (из-за бесконечного цикла). После этого некоторая обработка исключений возвращает его в точку до начала соединения.
while(true){
String msg = istream.readLine();
System.out.println("Arrived on server: " + msg); //just works on debug
ostream.writeUTF("ACK: " + msg);
ostream.flush();
}
Я не вижу, что мне не хватает.
PS: странная штука в том, что если я отлаживаю сервер, я вижу прибывающее туда сообщение (например, могу его распечатать), но это невозможно, если я просто запускаю этот код. Имеет ли это отношение к параллелизму, которое я пропускаю?
ТНХ