На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Client and Server , Не получается отправить с сервера на клиента текст
    На дельфи есть ServerSocket1
    В яве реализован клиент с клиента отправляется текст и сервер принемает а с сервера пытаюсь

    ExpandedWrap disabled
      for x:=0 to ServerSocket1.Socket.ActiveConnections-1 do
      ServerSocket1.Socket.Connections[x].SendText('Hello');

    клиент не принемает
    вот код клиента

    ExpandedWrap disabled
       // Start the thread for sending messages - see Sender's main
                  // comment for explanation
                  sender = new Sender(os);
       
                  // Loop forever, receiving data
                  while (true) {
                      StringBuffer sb = new StringBuffer();
                      int c = 0;
       
                      while (((c = is.read()) != '\n') && (c != -1)) {
                          sb.append((char)c);
                      }
       
                      if (c == -1) {
                          break;
                      }
       
                      // Display message to user
                      si.setText("Message received - " + sb.toString());
                  }
       
                  stop();
                  si.setText("Connection closed");
                  f.removeCommand(sendCommand);
              } catch (ConnectionNotFoundException cnfe) {
                  Alert a = new Alert("Client", "Please run Server MIDlet first", null, AlertType.ERROR);
                  a.setTimeout(Alert.FOREVER);
                  a.setCommandListener(this);
                  display.setCurrent(a);
              } catch (IOException ioe) {
                  if (!stop) {
                      ioe.printStackTrace();
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      Ктонибудь скажите как решить
        А какая проблема? Ошибка или что? Что значит "не принимает"?
        До куска
        ExpandedWrap disabled
          while (((c = is.read()) != '\n') && (c != -1)) {
                              sb.append((char)c);
          }
        корректно доходит? Хоть один символ начинает читать?
        Это первое.
        Второе - почему Вы думаете, что когда клиент получит всю строку Hello, он выйдет из этого цикла? А где, собственно, сервер передаёт '\n', которого ждёт клиент?

        Добавлено
        И стрим тоже не порушится, то есть -1 не вернётся, по крайней мере, пока таймаут не пройдёт.

        Добавлено
        Да и с кодировками будут проблемы при таком пересылании сообщений. Ну это уже на будущее.
          dark_barker может уже тогда есть готовый вариант? где нати
            krogal, не, ну причём тут готовый вариант. Готовых то полно.
            Цитата dark_barker @
            А где, собственно, сервер передаёт '\n', которого ждёт клиент?
            Я так и не понял - если на сервере поставить перенос строк
            ExpandedWrap disabled
              ServerSocket1.Socket.Connections[x].SendText('Hello\n');
            тоже не работает?
            Сообщение отредактировано: dark_barker -
              Цитата dark_barker @
              ServerSocket1.Socket.Connections[x].SendText('Hello\n');

              тоже не принемает
              ExpandedWrap disabled
                               while (((c = is.read()) != '\n') && (c != -1)) {
                                   sb.append((char)c);
                              
                   si.setText("Mess - " + sb.toString());
                                }
              а так принемает
              но каждоее сдедующее принятое приплюсовывается к предыдущему

              Добавлено
              И с кодировкой проблемы...
              Сообщение отредактировано: krogal -
                krogal, так проблема то в чём? :ph34r:

                С кодировкой понятно что будут проблемы, сразу и сказал. Потому что сервер, ясно понятно НЕ шлёт в ююникоде-16. А это "(char)c" подразумевает неприятности в даннов виде.
                Надо принимать по byte в байтовый буффер, а потом делать строку с кодировкой windows-1251.
                  Цитата dark_barker @
                  Надо принимать по byte в байтовый буффер

                  как это сделать?
                    Ну, вообще, is.read() возвращает БАЙТ, а не СИМВОЛ. Следовательно, логично предположить, что для всех других кодировок это не пройдёт. То есть, сервер посылает в windows-1251, а клиент пытается эти коды транслировать в Вашем примере напрямую в ДВУХБАЙТОВЫЙ юникод.
                    Стало быть, надо копить вывод в массиве byte[]massiv, класть их туда так: (byte)c.
                    А потом делать что-то типа
                    ExpandedWrap disabled
                      String str = new String(massiv, "windows-1251");
                      У меня была когдадато така проблема, проблема решилась следующим способом, надо отправлять нужнуй тебе текст c кодовым символом С сервера который написан на делфи через компонент сервер сокет, что то типа того : ServerSockets.connections[0].Socket.SendText('привет'+#$D+#$A);
                      В java это значение '\n' а в делфи это #$D+#$A и будет у тебя все пучком...!
                      Сообщение отредактировано: mityi -
                        Действительно проблема была с '\n' я вместо него назначил другой символ и все ок. Но теперь проблема с кодировкой как реализовать пример
                        ExpandedWrap disabled
                          String str = new String(massiv, "windows-1251");
                          dark_barker Спасибо все получилось.
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0398 ]   [ 16 queries used ]   [ Generated: 28.03.24, 12:06 GMT ]