Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как стопануть socket через bat / 12 сообщений из 12, страница 1 из 1
22.10.2012, 17:58:07
    #38008623
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как стопануть socket через bat
Доброе время суток! Подскажите что не так делаю...туплю по полной:
Есть сокет сервер. Есть 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
22.10.2012, 18:26:20
    #38008670
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как стопануть socket через bat
System.exit(0);
...
Рейтинг: 0 / 0
22.10.2012, 18:33:04
    #38008685
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как стопануть socket через bat
забыл ник,

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

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

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

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

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

Ааа ну да, я не понял извращенной мысли автора, извиняюсь.
Обычно, если надо удаленно взаимодействовать с сервером, делают так -
1) При старте сервера открывается один порт для клиентов, которые могут подключаться и производить полезную работу и
2) Сокет на другом порту для управления самим сервером. На который уже посылаются управляющие команды - типа старт, стоп, рестарт и т.д. Таким образом мы избавляемся от межпроцессной коммуникации. И в этом случае простейшим вариантом стопнуть сервер будет как раз System.exit так как все происходит в одной JVM, но это тоже некошерно на самом деле, ведь зачастую нужно определенным способом очистить ресурсы, дать доработать уже подключенным клиентам и тп - тут уже кастомная логика, но так как сервер и сокет будут в пределах одной JVM это не так уж и сложно сделать посредством разделяемой памяти.
...
Рейтинг: 0 / 0
23.10.2012, 04:10:31
    #38009110
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как стопануть socket через bat
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
23.10.2012, 12:18:15
    #38009627
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как стопануть socket через bat
и это
Basil A. Sidorov
Код: cmd
netstat -ano|find " LIS"|for /f "tokens=5" %A in ('find ":ПОРТ "') do taskkill /pid %A


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


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