Вот мой класс сервера, а также Admin/Client ... Администратор может получить исходное сообщение с сервера, но не может ответить на сервер. Создается серверный сокет, и когда администратор подключается к серверу, сообщение Сервера получает и печатает. Хотя после распечатки меню сервера («1. Вход и т. Д.»). Я не могу ввести опцию через консоль. Кажется, что он находится в тупике, как только администратор распечатает меню, отправленное с сервера.Не удается связаться с сервером от клиента
/**
A server that executes the Simple Bank Access Protocol.
*/
public class BankServer extends Thread {
private Socket sAdmin;
private Scanner inServer;
private PrintWriter outServer;
public static void main(String[] args) throws IOException {
Bank bank = new Bank(10);
ServerSocket server = new ServerSocket(8888);
System.out.println("Waiting for clients to connect...");
Thread admin = new BankServer();
admin.start();
while (true) {
Socket s = server.accept();
System.out.println("Client connected.");
BankService service = new BankService(s, bank);
Thread t = new Thread(service);
t.start();
}
}
@SuppressWarnings("resource")
public void run() {
try {
ServerSocket server = new ServerSocket(8889);
try {
System.out.println("Waiting for admin to connect...");
while (true) {
sAdmin = server.accept();
System.out.println("Admin connected.");
InputStream instream = sAdmin.getInputStream();
OutputStream outstream = sAdmin.getOutputStream();
inServer = new Scanner(instream);
outServer = new PrintWriter(outstream);
outServer.print(...+"1. Login\n"+etc...);
outServer.flush();
findCommand();
}
} finally {
sAdmin.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void findCommand() throws IOException {
while (true) {
if (!inServer.hasNext()) {
return;
}
String command = inServer.next();
String chosenCommand;
switch (command) {
case "1":
chosenCommand = "LOGIN";
runCommand(chosenCommand);
break;
case "2":
etc...
}
}
}
...
}
Ive удалил метод runCommand и некоторые поля, которые не создают проблем, позволяющих упростить чтение.
Это класс администратора. Он выведет параметры, отправленные с сервера, но не выйдет из цикла вывода сообщения intial и разрешит мне ввести выбор.
public class BankAdmin {
public static void main(String[] args) throws IOException {
Socket inAdmin = new Socket("localhost", 8889);
InputStream instream = inAdmin.getInputStream();
OutputStream outstream = inAdmin.getOutputStream();
Scanner in = new Scanner(instream);
PrintWriter adminOut = new PrintWriter(outstream);
Scanner console = new Scanner(System.in);
while (true) {
if (!in.hasNextLine()) {
String command = console.next();
System.out.println("Sending: " + command);
adminOut.print("command");
adminOut.flush();
} else {
String response = in.nextLine();
System.out.println(response);
}
}
}
}
слишком много коды, слишком широкой проблемы. Пожалуйста, подумайте о сокращении кода и более конкретной проблеме. – taxeeta
удалил метод, надеюсь, сделать его более простым для чтения. – user2994739
', но не может ответить на сервер. Откуда вы знаете? Вы получили сообщение об ошибке? Он посылает, но клиент так и не получил? – John3136