Ваша основная проблема заключается в том, что вы пытаетесь отправить пустую строку с клиента на сервер.Пустая строка преобразуется в байтовый массив длиной 0.По сути, вы не отправляете никаких данных между клиентом и сервером.В этой ситуации ваш сервер будет продолжать ожидать получения данных через InputStream сокета.Поскольку сервер все еще ждет, он не переходит к отправке данных обратно клиенту.В результате, когда ваш клиент пытается прослушивать данные с сервера, он ждет бесконечно, так как сервер никогда не достигает этой части кода.
Если ваша цель состоит в том, чтобы сервер просто отправлял данные при подключении, у вас есть несколько вариантов.
- При подключении сервер должен немедленно отправить список клиенту.Вам не нужно иметь двустороннюю связь здесь.Клиент может немедленно начать прослушивание InputStream.
- Пусть клиент отправит серверу не менее 1 байта, который сервер сможет получить через свой InputStream, а затем продолжит обработку.Если вам нужно выполнить несколько функций, то вам может понадобиться отправить строковое значение, которое что-то означает, например, out.write ("list" .getBytes ("UTF-8"));Затем сервер может выполнить операцию на основе полученного значения.
Пример сервера:
ServerSocket socket = new ServerSocket(8888);
Socket cSocket = socket.accept();
PrintWriter out = null;
try {
out = new PrintWriter(new OutputStreamWriter(cSocket.getOutputStream()));
for (String file : new File(".").list()) {
out.println(file);
}
}
finally {
if (out != null) {
out.close();
}
cSocket.close();
socket.close();
}
Пример клиента:
Socket s = new Socket("localhost", 8888);
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
finally {
if (in != null) {
in.close();
}
s.close();
}