Я просматривал множество объяснений использования Java Socket и создал следующий базовый код для моей собственной эхо-пары Server/Client. Однако в клиентском коде есть зависание, которое я не могу найти для жизни. Возможно, кто-то еще может это заметить?Ошибка связи сокета Java Echo Socket
// Server Code:
try (ServerSocket serverSocket = new ServerSocket(22222);
Socket cSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(cSocket.getOutputStream());
BufferedReader in = new BufferedReader(
new InputStreamReader(cSocket.getInputStream()))) {
System.out.println("Client connected: " + cSocket.getInetAddress().getHostAddress());
// console DOES print ^this line and correct IP when client is run.
String inLine;
while (true) {
inLine = in.readLine();
out.println(inLine);
if (inLine.equals("exit")) break;
}
// client code
try (Socket socket = new Socket("localhost", 22222);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader consoleIn = new BufferedReader(new InputStreamReader(System.in));) {
String userIn;
while (true) {
System.out.print("Client> ");
userIn = consoleIn.readLine();
out.println(userIn); // code hangs here.
out.flush();
System.out.println("Server> " + in.readLine());
if (userIn.equals("exit")) break;
}
Он не должен блокироваться. Вы уверены, что это не висит на линии раньше, читая консоль? Вы забыли ввести какой-либо вклад в клиент? NB вам нужно проверить результат 'readLine()' для null, с обоих концов. – EJP
Код зависает после ввода некоторого ввода, а затем нажмите клавишу ввода. Запрос направляется в пустую строку и отказывает ввод в консоли клиента. Это было бы ожидаемым поведением, если бы он не смог отправить или получить сообщение с сервера, но я не знаю, что точно. – Chris
https://drive.google.com/folderview?id=0Bzmbe59bsWNmcXpjY0VSclkwWVk&usp=sharing - это ссылка на файлы, если вы хотите ее протестировать. – Chris