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

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Как отловить состояния подключения в Socket на клиенте. , При разрыве связи (плохой сигнал GSM).
    Добрый день!
    Вобщем не могу разобраться как отследить состояния соединения в клиенте Socket с сервер.
    При разрыве соединения (Плохой сигнал GSM и имитируя путем закрытия порта на роутере) клиент думает что он еще соединен, при этом даже от него можно пытаться отсылать сообщения и тоже ошибки нет, как будто чего-то не хватает для обработки, хотя catch есть.

    Делал по примеру NetworkDemo1.
    Чистый NetworkDemo1 тоже самая ситуация.


    ExpandedWrap disabled
      package socket;
       
       
      import java.io.*;
       
      import javax.microedition.io.*;
      import javax.microedition.lcdui.*;
      import javax.microedition.midlet.*;
       
       
      public class Client implements Runnable, CommandListener {
          private SocketMIDlet parent;
          private Display display;
          private Form f;
          private StringItem si;
          private TextField tf;
          private boolean stop;
          private Command sendCommand = new Command("Send", Command.ITEM, 1);
          private Command exitCommand = new Command("Exit", Command.EXIT, 1);
          InputStream is;
          OutputStream os;
          SocketConnection sc;
          Sender sender;
       
          public Client(SocketMIDlet m) {
              parent = m;
              display = Display.getDisplay(parent);
              f = new Form("Socket Client");
              si = new StringItem("Status:", " ");
              tf = new TextField("Send:", "", 30, TextField.ANY);
              f.append(si);
              f.append(tf);
              f.addCommand(exitCommand);
              f.addCommand(sendCommand);
              f.setCommandListener(this);
              display.setCurrent(f);
          }
       
          /**
           * Start the client thread
           */
          public void start() {
              Thread t = new Thread(this);
              t.start();
          }
       
          public void run() {
              try {
                  sc = (SocketConnection)Connector.open("socket://krogal-home.dyndns.org:5000");
                  si.setText("Connected to server");
                  is = sc.openInputStream();
                  os = sc.openOutputStream();
       
                  // 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();
              }
          }
       
          public void commandAction(Command c, Displayable s) {
              if ((c == sendCommand) && !parent.isPaused()) {
                  sender.send(tf.getString());
              }
       
              if ((c == Alert.DISMISS_COMMAND) || (c == exitCommand)) {
                  parent.notifyDestroyed();
                  parent.destroyApp(true);
              }
          }
       
          /**
           * Close all open streams
           */
          public void stop() {
              try {
                  stop = true;
       
                  if (sender != null) {
                      sender.stop();
                  }
       
                  if (is != null) {
                      is.close();
                  }
       
                  if (os != null) {
                      os.close();
                  }
       
                  if (sc != null) {
                      sc.close();
                  }
              } catch (IOException ioe) {
              }
          }
      }


    ExpandedWrap disabled
      package socket;
       
      import java.io.*;
       
      import javax.microedition.io.*;
      import javax.microedition.lcdui.*;
      import javax.microedition.midlet.*;
       
       
      public class Sender extends Thread {
          private OutputStream os;
          private String message;
       
          public Sender(OutputStream os) {
              this.os = os;
              start();
          }
       
          public synchronized void send(String msg) {
              message = msg;
              notify();
          }
       
          public synchronized void run() {
              while (true) {
                  // If no client to deal, wait until one connects
                  if (message == null) {
                      try {
                          wait();
                      } catch (InterruptedException e) {
       
                      }
                  }
       
                  if (message == null) {
                      break;
                  }
       
                  try {
                      os.write(message.getBytes());
                      //os.write("\r\n".getBytes());
                  } catch (IOException ioe) {
                      ioe.printStackTrace();
                      
                  }
       
                  // Completed client handling, return handler to pool and
                  // mark for wait
                  message = null;
              }
          }
       
          public synchronized void stop() {
              message = null;
              notify();
          }
      }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0248 ]   [ 15 queries used ]   [ Generated: 25.04.24, 05:55 GMT ]