Java-сокеты с выполнением потока - PullRequest
1 голос
/ 23 января 2010

Я кодировал прослушиватель сокетов, который должен прослушивать порты 80 и 81, и когда данные поступают на эти порты, выполняют операции с этими данными. Я хочу, чтобы этот прослушиватель одновременно прослушивал оба этих порта и кодировался следующим образом.

 import java.net.*;
    import java.io.*;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;

    public class MultipleSocketServer implements Runnable {

     private int a;
  private ServerSocket connection;
  private String TimeStamp;
  private int ID;
public static void main(String[] args){

       // System.out.print("ip");
     // String gh="12345";
      //System.out.println(gh.substring(1,3));
  int port = 80;
  int port1 = 81;
  int count = 0;
  double a=234.52121;

   //System.out.println(bf3.toString());
    try{

      ServerSocket socket1 = new ServerSocket(port);
      ServerSocket socket2=new ServerSocket(port1);
      System.out.println("MultipleSocketServer Initialized");
      Runnable runnable = new MultipleSocketServer(socket1, ++count);
        Runnable run = new MultipleSocketServer(socket2, ++count);
        Thread thread = new Thread(runnable);
        Thread thread1 = new Thread(run);
      while (true) {
        //Socket connection = socket1.accept();

        thread.start();
        thread1.start();
      }
    }

    catch (Exception e) {}
  }
MultipleSocketServer(ServerSocket s, int i) {
  this.connection = s;
  this.ID = i;
}
public void run() {
    while(true){


    try {
        Socket incoming=connection.accept();


            BufferedInputStream is = new BufferedInputStream(incoming.getInputStream());
            int character;
     while((character = is.read())!=-1) {
    .
    .
    do the input data handling here
    .
    .

    }
    }
    catch(Exception e){}
    }
    }
}

Но по какой-то причине это, похоже, не показывает многопоточное / параллельное поведение. Я тестирую этот код с помощью Hyperterminal, и каждый раз, когда я отключаюсь от Hyperterminal, выполнение программы останавливается, и возникает исключение «Socket is closed».

Любые указатели были бы очень полезны

Приветствия

1 Ответ

1 голос
/ 23 января 2010

Вы запускаете темы в бесконечном цикле.

while (true) {
  //Socket connection = socket1.accept();
  thread.start();
  thread1.start();
}

Я думаю, что это обрабатывается (игнорируется) в

} catch (Exception e) {}

Однако я подозреваю, что описанная вами проблема связана с кодом обработки, который вы не включили. Одна довольно очевидная идея: вы не звоните connection.close() вместо incoming.close(), не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...