Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
2 / 2 / 1
Регистрация: 11.02.2013
Сообщений: 33

Компонент TServerSocket

17.02.2013, 12:06. Показов 5107. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал делать клиент-сервера, где используются компоненты TClientSocket у клиента и TServerSocket у сервера соответственно. И возникло несколько вопросов. Насколько я понял список подключившихся у сервера храниться в списке Connect c вот таким доступом:

C++
1
Form1->ServerSocket1->Socket->Connect(1);
Соответственно, я хочу при подключении отсылать клиенту его номер из этого списка, за тем, что бы он при отсылке на сервер в начале сообщения его проставлял. Таким образом сервер будет знать от кого что пришло. Но тут возникает вопрос: как отследить кто из клиентов отключился?

P.S. Конструктивная критика моего решения только приветствуется.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2013, 12:06
Ответы с готовыми решениями:

TClientSocket и TServerSocket
Не понимаю один вопрос. Например я передаю массив размерностью 4 с одного из этих компонента на другой, т.е. из одного узла в другой, и...

TServerSocket ShowMessage()
Подскажите пож. Возможно ли отослать клиенту мессагу типа ShowMessage() или MessageDlg()? Т.е. для окна клиента заранее плииз.

TClientSocket и TServerSocket
У меня вопрос по неопытности, не могу разобраться... Дело в следующем. Пишу приложение (в Borland Developer Studio 2006) которое является...

9
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
17.02.2013, 14:01
Я делал этого клиент-сервера с этими же компонентами как и ты, но у меня так он и незаработал. У тебя рабочий исходник?
0
2 / 2 / 1
Регистрация: 11.02.2013
Сообщений: 33
17.02.2013, 15:06  [ТС]
Накидал пример, что бы из моего проекта не выдирать куски кода. Работаю в BBC++ 6.
Вложения
Тип файла: rar Пример.rar (1.23 Мб, 108 просмотров)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 22:44
Цитата Сообщение от Стальное Перо Посмотреть сообщение
P.S. Конструктивная критика моего решения только п
В обще "вежливый" клиент должен перед уходом попрощаться с сервером.
Но если в друг не то то можно попытаться отослать ему сообщение если клиента - будет ошибка, её обработать...

Честно говоря компоненты старые и когда то давно их пробовал по примеру из книги Архангельского.

Сейчас бы я использовал Indy- компоненты.
0
2 / 2 / 1
Регистрация: 11.02.2013
Сообщений: 33
17.02.2013, 23:14  [ТС]
Да, вот именно этот случай меня интересует. В случае корректного завершения соединения проблем нет, но если клиент отсоединился некоректно (разрыв связи, сбой питания, потоп, чума, метеорит...), то надо это как-то отследить. А в чем отличие Indy?
0
 Аватар для Lelik-pahan
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
17.02.2013, 23:24
у каждого подключения ServerSocket1->Socket->Connections[i] есть свойство void *Data. Это указатель, в который мы можем поместить адрес любых наших данных, например, структуры со сведениями о клиенте.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct CleintInfo
{
    String name;
    int x;
    double y;
};
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    CleintInfo *connect = new CleintInfo;
    connect->name = "Клиент3";
    ServerSocket1->Socket->Connections[0]->Data = connect;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    CleintInfo *connect = (CleintInfo *)ServerSocket1->Socket->Connections[0]->Data;
    ShowMessage(connect->name);
}
1
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
18.02.2013, 08:20
Цитата Сообщение от Стальное Перо Посмотреть сообщение
Да, вот именно этот случай меня интересует. В случае корректного завершения соединения проблем нет, но если клиент отсоединился некоректно (разрыв связи, сбой питания, потоп, чума, метеорит...), то надо это как-то отследить.
Если честно, то из всех компонентов, эти некосипорят. И именно на них приходит выбор, чтобы работать по протоколам с микроконтроллерами. Отслеживать отключение, подключение, и метеориты там реально, вот пример что надо зполнить на клиенте SCLSSOCET:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::SCLSSOCETConnecting(TObject *Sender,
      TCustomWinSocket *Socket)
{
PortSCLS->Color=clGreen;
 
}
 
void __fastcall TForm1::SCLSSOCETDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
SCLSSOCET->Active=false;
PortSCLS->Color=clRed;
}
void __fastcall TForm1::SCLSSOCETError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
 
ErrorCode=0;
SCLSSOCET->Active=false;
PortSCLS->Color=clRed;
}
на сервере делать это попроще, там событие возникает о разрыве связи ClientDisconnect
0
2 / 2 / 1
Регистрация: 11.02.2013
Сообщений: 33
19.02.2013, 12:02  [ТС]
Понял, спасибо за помощь)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
19.02.2013, 12:31
Вот тут человек описывал может как дополнение к ответу

http://www.kowack.info/builder6/59/

Добавлено через 9 минут
Вот тут не плохо описано правда на Делфи

http://cybern.ru/klient-server... ocket.html
0
4 / 4 / 0
Регистрация: 11.02.2011
Сообщений: 89
20.02.2013, 07:40
Я лично с этими компонентами не работал, я только через них принимал сигналы или пакеты (как хочешь называй). Для хранения и обработки я использовал, свою структуру. Схема была такой, не важно какой пользователь, при подключении к серверу отправлял "Hello_Имя" при отключении "GoodBuy_Имя", а я на стороне сервера в структуре вел следующую статистику "№ соединения Имя пользователя", так же ввел дополнительный поток на сервере который висел постоянно, и прозванивал пользователей через определенное время. Грубо говоря sent и recive решают твою проблему, больше ни чего не надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2013, 07:40
Помогаю со студенческими работами здесь

TClientSocket и TServerSocket
Вопрос в следующем, посылаю в цикле серверу при помощи SendBuf: char temp; FILE * SendStream = fopen("forServer.txt",...

TServerSocket TClientSocket
пишу программу для мнгновенной отправки сообщений написал 2 программы(клиент и сервер) в клиенте в TClientSocket в свойстве Address...

TServerSocket vs. TIdHTTP
Вобщем случился затык, бьюсь уже несколько дней. Есть сервер. К серверу цепляются по локалке клиенты, использую связку...

TClientSocket и TServerSocket
В C++ Builder 6 есть компоненты TClientSocket и TServerSocket, но они предназначены для локальной сети, насколько я понял, а есть что-то...

TClientSocket & TServerSocket
Дорой ночи! У меня возникла проблема при написания чата. Короче я создал на основе компонентов TClientSocket и TServerSocket два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru