powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / tcp socket
20 сообщений из 20, страница 1 из 1
tcp socket
    #38852401
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, знатоки.

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

Примеры которые удалось нагуглить все только на передачу байтов, строчек. А так чтобы клиент мог работать через tcp с методами сервера не удалось найти.

Может, конечно, не умею хорошо искать :) Может так вообще нельзя. Сокет же просто канал создает для передачи байтов.
...
Рейтинг: 0 / 0
tcp socket
    #38852412
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позанудствую и порекомендую к ознакомлению
http://en.wikipedia.org/wiki/OSI_model
Пишешь сервлет и, о чудо. HTTP ведь тоже работает поверх TCP! Задача решена.

Вызов методов через TCP в Java называется RMI. Но зачем тебе такой анахронизм?
TCP не реализует никакого протокола уровня приложения. Это просто передача байтов. Тебе же нужно либо реализовать свой собственный протокол. Либо использовать существующие - HTTP, RMI, Hessian, protobuf и прочие.
...
Рейтинг: 0 / 0
tcp socket
    #38852431
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, спасибо.

ну вот в том то и дело. я сам удивился немного.

препод сказал, что нужно написать сервак для работы с бд(сервак1), сервак(сервак2), обрабатывающий запросы от клиента и клиента.

для связи можно использовать tcp/udp/rmi/servlet

и есть интерфейс, с которым клиент может работать.

вот я запутался, как использовать tcp и udp. получается нужно брать сервак1-сервак2 rmi, а сервак2-клиент - сервлет.

единственное хотел сделать клиента консольным. а два раза rmi использовать нельзя.

вообщем странно немного.
...
Рейтинг: 0 / 0
tcp socket
    #38852436
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Вероятно у тебя задача изучить Socket API в Java, а вы её как-то не верно интерпретировали? Я бы все же с преподом выяснил побольше конкретики, а потом уже на форум за советами.
...
Рейтинг: 0 / 0
tcp socket
    #38852437
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо.
...
Рейтинг: 0 / 0
tcp socket
    #38853566
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал в итоге связку rmi и сервлет.

1.Есть сервер, который работает с бд.
2.Есть сервер, который принимает запросы от клиента. Для этого сервера написан сервлет.

Сервер 1 и Сервер2 работают по rmi.

Не пойму, как мне сделать, чтоб соединение между сервером1 и сервером2 всегда было одно, при этом запросов от клиентов может быть много.

То есть сервлет обрабатывает запросы от клиента. Но соединяться с базой данных, то есть с сервером 1 может только один клиентский запрос. Остальные в это время ждут пока освободится соединение. То есть сервер2 работает как коммутатор.

Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
tcp socket
    #38853762
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может я как-то "криво" описал свою проблему? :)
...
Рейтинг: 0 / 0
tcp socket
    #38853779
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusможет я как-то "криво" описал свою проблему? :)
Через
Executors.newSingleThreadExecutor();
создаешь однопоточный ExecutorService, который будет все задачи синхронизировать в очередь. Соответственно однин поток - одно соединения.
Клиентские потоки можно либо блокировать через Future.get(), либо отпускать, а Future куда-нить складывать или не использовать вообще.
...
Рейтинг: 0 / 0
tcp socket
    #38853844
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Cпасибо :)
...
Рейтинг: 0 / 0
tcp socket
    #38854011
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

а можно ещё помочь? Вот мой сервлет:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class ServletCommutator extends javax.servlet.http.HttpServlet {

    private static String[] history = null;

    ServerCommutator serverCommutator = null;

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        String login = request.getParameter("login");
        String password = request.getParameter("password");
        serverCommutator = ServerCommutator.getInstance();
        serverCommutator.login(login, password);
        history = serverCommutator.getHistory(login);
        request.setAttribute("history", history);
        request.getRequestDispatcher("history.jsp").forward(request, response);
    }
}


serverCommutator - создает соединение, и имеет методы для работы с бд. все через rmi.

мне в сервлете нужно использовать Executors.newSingleThreadExecutor();?
...
Рейтинг: 0 / 0
tcp socket
    #38854184
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Ну, где-то между сервлетом и работой с БД. Не забудь привязать shutdown() к Servlet Destroy.
...
Рейтинг: 0 / 0
tcp socket
    #38854199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При одно-сокетной работе один "запрос-ответ-тормоз" может затормозить всю очередь.
...
Рейтинг: 0 / 0
tcp socket
    #38854215
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Можно попробовать настроить serializable транзакции :) тогда любые конкурирующие транзакции к БД будут выстраиваться в очередь.
...
Рейтинг: 0 / 0
tcp socket
    #38854270
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
спасибо.

а правильно я понимаю, что если я сделал serverCommutator как singleton класс, а этот класс у меня создает соединение с бд,

то по сути у меня с бд всегда будет только одно соединение открыто. А клиенты в свою очередь дергать методы этого синглетон класса?
...
Рейтинг: 0 / 0
tcp socket
    #38854311
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusа правильно я понимаю, что если я сделал serverCommutator как singleton класс, а этот класс у меня создает соединение с бд,
то по сути у меня с бд всегда будет только одно соединение открыто. А клиенты в свою очередь дергать методы этого синглетон класса?

Singleton здесь немного не в тему. Ну, разва что если его ещё завернуть в synchronized, то да. Будут потоки работать по очереди.
...
Рейтинг: 0 / 0
tcp socket
    #38854314
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

а вот интересно....
потоки... я вот сколько ни читал про сервлеты, там как-то про потоки не понятно написано.

пишут только что вебконтейнер сам управляет экземплярами класса сервлет.

когда дофига клиентов он может увеличить количество экземпляров сервлетов.

то есть как этот "туман" связать с потоками как то не ясно...
...
Рейтинг: 0 / 0
tcp socket
    #38854333
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusпотоки... я вот сколько ни читал про сервлеты, там как-то про потоки не понятно написано.
пишут только что вебконтейнер сам управляет экземплярами класса сервлет.

Ты начинаешь про потоки, но спрашиваешь про экземпляры. Это перпендекулярные понятия. Многие потоки могут использовать один синглтон.

mr_virtusкогда дофига клиентов он может увеличить количество экземпляров сервлетов.

Нет, не из-за этого. Тут много разных факторов - старая спецификация и обратная совместимость, интерфей SingleThreadModel и заточка JEE под распределенную систему. Их не то чтобы много. Просто нельзя закладываться на то что этот экземпляр один. Это не значит что их много. Экземпляр почти всегда один. Но на это категарически нельзя завязывать логику.

mr_virtusто есть как этот "туман" связать с потоками как то не ясно...
Потоки и экземпляры совершенно разные понятия. Если это не совсем понятно, надо потратить время и разобраться.
...
Рейтинг: 0 / 0
tcp socket
    #38854339
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо. появились прояснения :). ключевой момент - что разные web клиенты запускаются в разных потоках.
...
Рейтинг: 0 / 0
tcp socket
    #38854345
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusключевой момент - что разные web клиенты запускаются в разных потоках.
Для первичного понимания это так.
Но для точности, это так только с уточнением. Утверждение верно "в один момент времени". Потоки переиспользуются и если сейчас через поток заходил Вася, то через минуту этот же поток может использовать Петя. Этот факт приводит к частым ошибкам у новичков, когда Петя вдруг видит данные Васи.
...
Рейтинг: 0 / 0
tcp socket
    #38854350
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

здорово. Очень интересно :)

Спасибо Вам за полезную информацию!
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / tcp socket
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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