powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить ServerSocket без выбрасывания исключений?
4 сообщений из 4, страница 1 из 1
Как остановить ServerSocket без выбрасывания исключений?
    #39710595
Lestat666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код сервера:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
package server;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {

        private BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        private static ExecutorService executeIt = Executors.newFixedThreadPool(5);
        private Socket client;


        public static void main (String [] args) {
            Server server = new Server();
            server.go();
        }

        public void go () {

            try {               
                ServerSocket server = new ServerSocket (3345);

                Thread t = new Thread (new ServerCheck(server)) ;
                t.start();

                System.out.println("connection accepted");
                System.out.println("DataInputStream and DataOutputStream created");

                while (!server.isClosed()) { 

                    System.out.println("Server reading from channel");                
                    client = server.accept();
                    executeIt.execute(new MonoThreadClientHandler(client));
                    System.out.println("Connection accepted."); 
                }                
            }
            catch (Exception e) {
                e.printStackTrace();
            } 
        }


    public class ServerCheck implements Runnable  {
        ServerSocket sc;
        public ServerCheck (ServerSocket sc) {
        this.sc=sc;
    }            
    @Override
    public void run() {
        try {
            if (br.readLine().equalsIgnoreCase("exit"))
                br.close();
                sc.close();                
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
    }

}

}





При выполнении ServerSocket.close() вылетает исключение:
java.net.SocketException: socket closed

в строке:
client = server.accept();

Как я понимаю, на этой строке поток останавливается и ждет коннекта от клиента, и в этот момент я его закрываю.

Как правильно обойти это исключение и завершить работу сервера?
...
Рейтинг: 0 / 0
Как остановить ServerSocket без выбрасывания исключений?
    #39710646
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обычно - "перехватить и обработать".
...
Рейтинг: 0 / 0
Как остановить ServerSocket без выбрасывания исключений?
    #39710659
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего - нормальное поведение. Клиент уже закрыл сокет и сервер при закрытии получает такое состояние.
Как обойти? Ну как всегда. Обработать.

Здесь не в тему топика. Это ужасный код. Никогда так не пишите.
У читающего будет когнитивное искажение. Его глаза и его мозг
будут кричать о том что sc.close вложен в if () {} хотя на самом деле
это не так.
Lestat666
Код: java
1.
2.
3.
            if (br.readLine().equalsIgnoreCase("exit"))
                br.close();
                sc.close();
...
Рейтинг: 0 / 0
Как остановить ServerSocket без выбрасывания исключений?
    #39710941
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКлиент уже закрыл сокет и сервер при закрытии получает такое состояние.
У него серверный слушающий сокет. Нет клиента.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить ServerSocket без выбрасывания исключений?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]