вопрос сокетов Java - PullRequest
       0

вопрос сокетов Java

1 голос
/ 05 февраля 2010

Я делаю слушателя, который в основном слушает порт как навсегда и, как только клиент подключается к нему, затем инициирует передачу таким образом, что слушатель сначала отправляет строку "@ AUTH @", а затем клиент отвечает и т. д.

Мой сегмент кода для вышеупомянутого выглядит следующим образом

while(true){


try {


    Socket incoming=connection.accept();
    while(!incoming.isClosed())
    { 
        out = new PrintWriter(incoming.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
        BufferedInputStream is = new BufferedInputStream(incoming.getInputStream());    //inputstream to get data from the socket
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        out.println("@AUTH@");
}
}
catch(Exception e){}
}

где 'connection' - это объект класса ServerSocket. Теперь, когда я тестирую свой код с помощью Hyoperterminal, мне нравится подключаться к порту и при первом подключении, отображается строка «@ AUTH @», но затем, как только я отключаюсь от этого порта с помощью Hyperterminal и снова подключаю, строка «@AUTH @ "не отображается. По сути, я хочу, чтобы эта строка отображалась каждый раз, когда клиент подключается к этому порту, поскольку он действует как инициация для всего процесса авторизации.

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

Приветствия

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

Я подозреваю, что проблема в том, что вы не читаете никаких данных. Если гипертерминал отправил что-либо (например, коды согласования telnet), то все еще есть данные для чтения из сокета, поэтому он, вероятно, не рассматривает их как закрытые. Поэтому ваш код по-прежнему имеет дело с первым соединением и не сможет принять новое.

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

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

0 голосов
/ 15 февраля 2010

Ваш код не имеет никакого смысла.

(a) Socket.isClosed () возвращает true, когда вы закрываете сокет и в другое время. (б) Вы создаете новые входные и выходные потоки каждый раз вокруг этого цикла. Они должны быть созданы один раз.

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