Я написал эту простую Java-программу, которая подключается к внутреннему серверу и возвращает сведения о домене. Однако я сталкиваюсь со странной проблемой. Я могу звучать глупо, но вот программа!
import java.io.*;
import java.net.*;
public class SocketTest {
public static void main(String[] args) {
String hostName;
int i = 0;
try {
Socket socketClient = new Socket("whois.internic.net", 43);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
InputStream in = socketClient.getInputStream();
OutputStream out = socketClient.getOutputStream();
System.out.println("Please Enter the Host Name!!");
hostName = bf.readLine();
hostName = hostName + "\n";
byte[] buf = hostName.getBytes();
out.write(buf);
while((i = in.read()) != -1) {
System.out.print((char)i);
}
socketClient.close();
} catch(UnknownHostException uht) {
System.out.println("Host Error");
} catch(IOException ioe) {
System.out.println("IO Error " + ioe);
} catch(Exception e) {
System.out.println("Exception " + e);
}
}
}
Программа работает нормально, без каких-либо ошибок во время выполнения, но она не показывает вывод, когда я пытаюсь распечатать результат с внутреннего сервера в последнем фрагменте блока try. Я попытался переупорядочить код и обнаружил, что если я помещаю bf.readLine()
после создания потоков сокетов, вывод не производится. Однако, если я помещу его перед созданием сокета (в начале метода main), программа отобразит намеченный результат.
Есть ли конфликт потоков или так? Я новичок в сети на Java. Решение может быть очевидным, но я не могу понять! Пожалуйста, помогите мне !!!