• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Посоветуйте стабильный компонент для клиент-серверной программы

  • Автор темы eXpressionist
  • Дата начала
E

eXpressionist

Доброго времени, уважаемые!

Пишу программу, от которой требуется быть очень надежным чатом. То есть передаются и принимаются лишь строчки с текстом, которые прога расшифровывает и выполняет команды.
В данный момент работает на стандартных TClientSocket и TServerSocket в D7. Вся сетевая часть взята на основе статьи , за небольшими изменениями.
В сети сервер и 4 компа - один во внешке, два по VPN и один по локалке.
Происходит такое, что порой то отваливаются клиенты, то - самое важное - не доходят сообщения до сервера даже по локалке, причем иногда из 6 сообщений приходит первое и последнее, а промежуточные теряются.

Может эти сокеты глючные? Если менять, то главный критерий выбора компонента - быстрая портация существующей сетевой части..

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

vital

сообщений приходит первое и последнее, а промежуточные теряются.
Это беда никак не компонентов, а самой программы. Это первое.

Второе.
Вместо устареших компонентов используйте компоненты от Indy 9

Третье.
Хотите полной уверенности - пишите всю работу сокетом руками, благо, не так и сложно.
 
E

eXpressionist

Не исключаю, разумеется, и косяков программы. Изначально все работало более-менее стабильно, и вот последнее время после переделки сети пошли глюки.

Согласно вышеуказанной статье, серверный таймер работает вот так:
Код:
If ServerSocket.Socket.ActiveConnections<>0 then
Begin
For i:=1 to ServerSocket.Socket.ActiveConnections do
Begin
txt:=ServerSocket.Socket.Connections[i-1].ReceiveText();
If txt<>'' then
Begin
com:=StrToInt(Copy(txt,1,1));
len:=Length(txt)-1;
Case com of
и в кейсе в зависимости от первого символа выполняет некие условия.. пробовал таймер менять и на 200, и на 100 - не приносит пользы.

Инди компонент попробую, нашел какой-то исходник, поглядим..

Руками через Winsock API? Почитал статейку - мне пока такое не по зубам. По крайней мере, в короткие сроки, в которые необходимо пофиксить указанную софтину..
 
V

vital

Может конечно я не прав, но по-моему, та реализация чата по вашей статье - это полный п*здец.

смотрели тут примеры?

Мне дико не нравится таймер на сервере. Бред какой-то.
 
E

eXpressionist

vital
вы правы) просто это было лучшее из доступного.

за ссылочку спасибо, оценю.

таймер на сервере мне уже ТОЖЕ не нравится, с появлением жалоб, растущих по экспоненте.
 
V

vital

я хоть убейте не понимаю зачем. просто на onclientread рассылайте всем клиентам сообщения. Если делать это не на онклиентрид, а по таймеру, то вы как минимум будете терять сообщения. Жалобы вроде бы в этом, да?)
 
E

eXpressionist

vital
если не ошибаюсь, OnRead и OnWrite работают только при ThreadBlocking типе сервера, а у меня NonBlocking.
хотя, ошибаюсь. попробую перенести.

изменил.. поглядим, как прибавит стабильности.

p.s. спасибо за совет, думаю что все-таки будет лучше. а то уже пару месяцев с прогой сношаюсь, но на такой момент, как ненужность таймера, внимания не обращал.
 
E

eXpressionist

И все-таки не помогло, сегодня опять жаловались и жаловались.. И опять по локалке пропадает..
Попробую сделать три сокета - один на список контактов, другой на чат, третий на служебные цели
 
V

vital

а пропадают точно из-за программы? мб блочит что-то в сети? поэксперементируйте. найдите закономерность когда пропадают. Рандомно не может быть.
 
M

mss

> серверный таймер работает

За каким лешим он там сдался, таймер этот ?

События OnClientRead/Write для Пушкина сделаны ?
 
E

eXpressionist

mss
уже перенес. а OnClientWrite вообще не нужен, по крайней мере в моем случае.

vital
что может блочить мне трудно сказать. сервер стоит на Kerio (порты расшарены). и главное, что в течение дня, без каких-либо смен настроек, могут мессаги пропадать.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!