Я создаю программу, в которой сервер может получать сообщения от нескольких клиентов. Клиенты создадут соединение и нажав кнопку, отправив информацию, а затем закроют соединение (а не прямую и прямую чат-программу).Java-сообщение, не отправляемое на сервер, если только предыдущий экземпляр клиента не закрыт
Проблема, с которой я столкнулся сейчас, заключается в том, что я запускаю класс программы сервера, а затем дважды запускаю клиентскую программу (для имитации подключения двух пользователей). Однако, когда я отправляю информацию о классе клиента, созданном 2-м, он не будет проходить или обрабатываться до тех пор, пока 1-й клиент не будет закрыт.
Это также мой первый раз, используя сокеты и темы, так что любые советы относительно того, что я делаю неправильно был бы оценен
Я просто призывающие методы прямо сейчас через статическую недействительных сеть
new Server().runServer();
public void runServer() throws SocketException, IOException{
serverSocket = new ServerSocket(PORT);
System.out.println("Server up");
while(true){
Socket socket = serverSocket.accept();
new ServerThread(socket).run();
}
}
public class ServerThread extends Thread{ //
Socket socket;
ServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run(){
try {
String message = null;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((message = bufferedReader.readLine()) != null){
Server.addToQueue(message);
}
} catch (IOException ex) {
} finally{
try {
if (socket != null)
socket.close();
} catch (IOException ex) {
}
}
}
}
} клиентский код выглядит следующим образом:
public class Client {
public static void main(String[]args){
sendToServer();
}
public static void sendToServer(){
String readerInput;
Socket socket = null;
PrintWriter printWriter = null;
try {
socket = new Socket("localhost", 4444);
printWriter = new PrintWriter(socket.getOutputStream(), true);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
readerInput = bufferedReader.readLine();
printWriter.println(readerInput);
} catch (IOException ex) {
} finally{
try {
socket.close();
} catch (IOException ex) {
}
}
}
}
спасибо mate :) это сработало, думаю, мне нужно искать поток больше, а не следовать учебникам – bamramjam
В каком учебнике вы нашли, что использовали 'Thread.run()'? – EJP
Я думаю, что это была комбинация нескольких случайных Java-чатов, которые я смотрел на YouTube. Однако я думаю, что они могли использовать инструменты Runnable вместо продолжения Thread, поэтому я, возможно, запутался в запуске с запуском ¬_¬ – bamramjam