powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как стопануть socket через bat
12 сообщений из 12, страница 1 из 1
Как стопануть socket через bat
    #38008623
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток! Подскажите что не так делаю...туплю по полной:
Есть сокет сервер. Есть 2 батника: run.bat и stop.bat

run.bat
Код: java
1.
%JAVA_HOME%\bin\java -jar Server.jar start



ну и соответственно

stop.bat
Код: java
1.
%JAVA_HOME%\bin\java -jar Server.jar stop



2 класса:
Launcher.java и ServerWorker.java

Launcher.java

Код: 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.
import beans.ServerForm;
import java.io.*;
import java.net.*;
import java.security.*;
import java.util.Properties;
import org.apache.log4j.Logger;

public class Launcher {

    private static Logger _log = Logger.getLogger(Launcher.class);
    private static ServerForm serverForm = new ServerForm();
    private static ServerWorker serverWorker;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
         if (args.length > 0) {
            try {
                if (args[0].equals("start")) {
                    _log.info("trying start server...");
                    serverForm.setIsServerWork(true);
                    serverWorker = new ServerWorker(serverForm);
                    Thread threadServer = new Thread(serverWorker);
                    threadServer.start();
                } else if (args[0].equals("stop")) {
                    _log.info("trying stop server...");

                }
            } catch (Exception ex) {
                _log.error(ex);
            }
        }
    }
}



ServerWorker.java


Код: 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.
package server;

import beans.ServerForm;
import java.net.*;
import java.io.*;
import java.util.Properties;
import org.apache.log4j.Logger;


public class ServerWorker extends Thread {

    private static Logger _log = Logger.getLogger(ServerWorker.class);
    private ServerForm serverForm;
    ServerSocket serverSocket;

    public ServerWorker(ServerForm serverForm) throws IOException {
        this.serverForm = serverForm;
    }

    public void run() {
        int port = 4444;

        try {
            serverSocket = new ServerSocket(port);
            while (this.serverForm.isIsServerWork()) {
                Socket socket = serverSocket.accept();
                Worker worker = new Worker(socket);
                new Thread(worker).start();
            }
        } catch (Exception e) {
            _log.error(e);
        }
    }
}



Подскажите как передав параметр stop стопануть сокет сервер
в месте

Код: java
1.
2.
3.
4.
} else if (args[0].equals("stop")) {
                    _log.info("trying stop server...");

                }


Сильно плиз не пинать.
Спасибо.
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008670
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
System.exit(0);
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008685
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

У него ж сервер в другом потоке.
Надо как-то в тот же сокет команду послать и обработать. Ну и т.п., java interprocess communication
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008690
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял...разве это остановит сокет сервер?
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008698
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,

Сервер должен как-то понять что ему пора остановиться.
Как вариант, останавливаться при получении специальной команды через такой же сокет.
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008706
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Клиентский сокет?
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008716
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,

Ну, так же как клиенты подключаются, да.
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008732
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лагман,

Спасибо за совет попробую
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38008779
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагманзабыл ник,

У него ж сервер в другом потоке.
Надо как-то в тот же сокет команду послать и обработать. Ну и т.п., java interprocess communication

Ааа ну да, я не понял извращенной мысли автора, извиняюсь.
Обычно, если надо удаленно взаимодействовать с сервером, делают так -
1) При старте сервера открывается один порт для клиентов, которые могут подключаться и производить полезную работу и
2) Сокет на другом порту для управления самим сервером. На который уже посылаются управляющие команды - типа старт, стоп, рестарт и т.д. Таким образом мы избавляемся от межпроцессной коммуникации. И в этом случае простейшим вариантом стопнуть сервер будет как раз System.exit так как все происходит в одной JVM, но это тоже некошерно на самом деле, ведь зачастую нужно определенным способом очистить ресурсы, дать доработать уже подключенным клиентам и тп - тут уже кастомная логика, но так как сервер и сокет будут в пределах одной JVM это не так уж и сложно сделать посредством разделяемой памяти.
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38009110
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipну и соответственно
stop.bat
Код: java
1.
%JAVA_HOME%\bin\java -jar Server.jar stop

Код: cmd
netstat -ano|find " LIS"|for /f "tokens=5" %A in ('find ":ПОРТ "') do taskkill /pid %A
не проще?
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38009627
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и это
Basil A. Sidorov
Код: cmd
netstat -ano|find " LIS"|for /f "tokens=5" %A in ('find ":ПОРТ "') do taskkill /pid %A


в rt.exec засунуть
...
Рейтинг: 0 / 0
Как стопануть socket через bat
    #38009946
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагманв rt.exec засунуть Зачем, если stop.bat уже есть?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как стопануть socket через bat
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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