Member 14566920 Ответов: 1

Я должен создать приложение которое берет 2 числа со стороны клиента отправляет их на сервер а затем возвращает их сумму


в основном я думаю,что сделал все правильно,однако программа внезапно перестает работать в bis.readline ();, до этого у меня был сервер и клиент в отдельных классах,однако он застрял в cn.accept (), поэтому при попытке исправить я добрался до этого кода (его в основном внутри действия кнопки "ok", которая должна инициировать соединение с сервером ,также текстовые поля 1 и 2-это поля, где добавляются числа, Если вам интересно, что со всеми system.out.prints, это просто я пытался понять, где код остановился работает.

Что я уже пробовал:

try {
    ServerSocket sServer = new ServerSocket(2121);
    Socket  cns = new Socket("localhost", 2121);
    System.out.println(cns.isConnected());
    Socket cn = sServer.accept();
    System.out.println(cns.isConnected());
    String a = textField1.getText();
    String b = textField2.getText();
    System.out.println("ok");
    BufferedReader bis = new BufferedReader(new InputStreamReader(cn.getInputStream()));
    BufferedOutputStream bos = new BufferedOutputStream(cn.getOutputStream());
    BufferedReader bist = new BufferedReader(new InputStreamReader(cns.getInputStream()));
    BufferedOutputStream bost = new BufferedOutputStream(cns.getOutputStream());
    System.out.println("ok");
    bost.write(a.getBytes());
    bost.write(b.getBytes());
    System.out.println("ok");

    String req = bis.readLine();
    String rew = bis.readLine();
    int sekta = Integer.parseInt(req);
    int sekts = Integer.parseInt(rew);
     System.out.println("ok");
    bos.write(sekta+sekts);
    String c = bist.readLine();

    JOptionPane.showMessageDialog(null, "result is" + c, "result", 300);


} catch (IOException ex) {
    Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}

Richard MacCutchan

Вы должны запустить это в отладчике, чтобы точно узнать, что произошло в тот момент, когда программа останавливается.

Member 14566920

ну,я запустил отладчик, поставил несколько точек останова, и код останавливается на строке req = bis.readLine();
может быть, я не знаю, как правильно использовать отладчик?

Richard MacCutchan

Что именно вы подразумеваете под этим, "код останавливается" Помните, что мы не можем видеть ваш экран, поэтому понятия не имеем, в каком состоянии находится ваше приложение. Ждет ли он сообщения, разбился ли он, создал ли исключение и т. д.?

Member 14566920

в основном все выполняется корректно до тех пор,пока bis.readLine() программа просто остается на этом месте, как будто ожидая чтения сообщения, хотя я уже отправил его в bost.write

Richard MacCutchan

Так что он явно не получает ничего для чтения. мы не можем догадаться почему.

1 Ответов

Рейтинг:
2

Gerry Schmitz

Ваш "паттерн" подобен соединению садового шланга с самим собой. Лучше пойти более стандартно.

Программирование сокетов на Java - GeeksforGeeks[^]