Я впервые пытаюсь программировать сокеты, пробую коды от https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/SocketProgramming/SocketProgram.html и внедряю их во фрейм.Клиенты могут подключаться к серверу, но есть некоторые проблемы с моим фреймом сервера, так как он не отвечает.И обработчик запросов подходит для первого использования для каждого клиента и не работает для следующего запроса.Я замечаю, что обработчик выглядит как цикл, который я не знаю, почему это происходит.
Как сервер реагирует на запрос
Вот как язапустить сервер
private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {
try {
server = new ServerSocket(8005);
executor = Executors.newFixedThreadPool(5);
System.out.println("Waiting for clients");
while (true) {
socket = server.accept();
Runnable worker = new RequestHandler(socket);
executor.execute(worker);
System.out.println("check executor");
}
} catch (Exception e) {
System.out.println(e);
} finally{
if(executor!=null){
executor.shutdown();
}
}
}
Обработчик запросов
public class RequestHandler implements Runnable {
private Socket socket;
ServerSocket server = null;
public RequestHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String userInput = in .readLine();
while (userInput != null) {
System.out.println("Received Message from " + Thread.currentThread().getName() + ": " + userInput);
jtaLog.append("Received Message from " + Thread.currentThread().getName() + ": " + userInput);
writer.write("You write : " + userInput);
writer.newLine();
writer.flush();
}
} catch (Exception e) {
System.out.println(e);
}
}
}
А из клиентской программы запрос сделан так:
private void btnSendActionPerformed(java.awt.event.ActionEvent evt) {
try {
String message = tfMessage.getText();
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println(message);
jtaLog.append( in .readLine() + "\n");
} catch (Exception e) {
System.out.println(e);
}
}