Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191

сервер чата с несколькими клиентами

10.08.2010, 08:40. Показов 4491. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот код чата
C++
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   Memo1->Text="";
   Button3->Enabled=false;
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
        ServerSocket1->Port=3000;
        ServerSocket1->Active=true;
 
}
 
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    ServerSocket1->Active=false;
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        if(ServerSocket1->Active)
        {
          ServerSocket1->Socket->Connections[0]->SendText(Edit1->Text);
          Memo1->Lines->Add(Edit1->Text);
          Edit1->Text="";
        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    StaticText2->Caption="Включен";
        Button3->Enabled=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    StaticText2->Caption="Disconnected";
        Button3->Enabled=false;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
   ErrorCode=0;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
   Memo1->Lines->Add("Клиент: "+Socket->ReceiveText());
}
//---------------------------------------------------------------------------
эта строка отсылает сообщение клиенту под номером 0
C++
1
 ServerSocket1->Socket->Connections[0]->SendText(Edit1->Text);
Как мне сделать что бы сервер определял скока подключилось и выводил их IP в листбокс, при получении сообщения на сервер, он отсылал его всем подключившимся клиентам?

Добавлено через 54 секунды
и еще, что бы каждому клиенту присваивалось имя, либо я сам его с сервера назначал
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2010, 08:40
Ответы с готовыми решениями:

Клиент и Сервер локального чата
Всем привет. Я тут разбирал коды для Метода TTcpServer & TTcpClient. ЭТО СЕРВЕР, вот только не понятно как сделать так чтобы туда...

Работа QTcpServer с несколькими клиентами
Имеется сервер который напрямую общается с бд(sqlite). К нему одновременно и постоянно подключаются и отключаются(после завершения работы с...

Совет по работе с несколькими TCP клиентами
Всем привет. У меня возникло некоторое недопонимание как работать с несколькими TCP клиентами. Может просто дико туплю. В общем есть...

22
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 09:18
при каждом коннекте в событии onConnect введи счетчик и добавляй IP в листбокс
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 09:21  [ТС]
а как это сделать?
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 09:27
ProstoMad, у servera есть событие ServerSocket1ClientConnect

C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
 
        IPNum++;
        ListOfIP[IPNum].IP= Socket->RemoteAddress;
        ListBox1->Items->Add(ListOfIP[IPNum].IP);
}
это с моей проги выдернул
ListOfIP- это массив, где каждая запись содержит информацию о подсоединившимся клиенте

 Комментарий модератора 
все обсуждения на форуме
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 09:34  [ТС]
ошибка
invalid inderection
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 09:37
ProstoMad, ты этот код просто вставл в прогу чтоли?
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 09:40  [ТС]
да, ну там тока писал инт ИПнам и листофип
а че делать надо?
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 09:44
ProstoMad, нельзя так просто вставлять
еще же надо прописать эту функцию в классе

лешче сделать так
на форме щелкаешь на ServerSocket1
открываешь вклабду events и там ищещь это событие ClientConnect
щелкаешь 2 раза и builder сам вставит нужный код: вылезет пустая функция
C++
1
2
3
4
5
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
 
}
и вот в нее вставляешь нужный код
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 09:47  [ТС]
так я же до этого делал это
C++
1
2
3
4
5
6
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
        StaticText2->Caption="Включен";
        Button3->Enabled=true;
}
Это было там.
я туда просто добавил и все
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 09:50
вставь
C++
1
ListBox1->Items->Add(Socket->RemoteAddress);
1
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 10:21  [ТС]
Это понятнее)
робит) спс

Добавлено через 26 секунд
а ччто бы он мог с несколькими соединяться?

Добавлено через 27 секунд
не забивая определенное кол-во подключений
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 10:23
ProstoMad, в смысле? поподробей объясни
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 11:05  [ТС]
ну если писать
C++
1
2
3
ServerSocket1->Socket->Connections[0]->SendText(Edit1->Text);
ServerSocket1->Socket->Connections[1]->SendText(Edit1->Text);
ServerSocket1->Socket->Connections[2]->SendText(Edit1->Text);
то надо много этого писать и если подключилось меньше чем кол во строк, то он наверн выдаст ошибку либо просто в пустую будет отсылать сообщение.
можно вместо цифры писать переменную? вот так:
C++
1
ServerSocket1->Socket->Connections[Num]->SendText(Edit1->Text);
Добавлено через 25 минут
еще вопрос появился, как удалить при отключении клиента из листбокса его строку?
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 12:23
ProstoMad, разумеется можно, это же массив
чтоб удалить из листбокса строку... там есть какой-то метод, не помню посмотри в helpe
указываешь номер строки и он удаляет ее
а для чего тебе этот чат?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
10.08.2010, 12:54
D@rkD@iver,
C++
1
ListBox1->Items->Delete(Index); //Где Index - это номер строки, которую нужно удалить
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 12:55
Nitan, точно
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 13:17  [ТС]
Так мне надо что бы при отключении от сервера, клиент автоматически удалялся
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 13:30
ProstoMad, в событии онклиетдисконект (OnClientDisconnect)
берешь IP, потом ищешь по ListBox этот IP и удаляешь
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
10.08.2010, 14:08  [ТС]
я понял куда писать, но я не знаю как найти того кто вышел
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
10.08.2010, 14:13
ProstoMad, по IP
берешь IP у сокета а потом ищешь его в листбоксе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2010, 14:13
Помогаю со студенческими работами здесь

Сокеты, одновременная работа с несколькими клиентами !!!
Привет, совсем запутался с сокетами. Нужно такое приложение, которое будет обрабатывать сразу много клиентов. Причем в такой схеме может...

Программа синхронизации папок по сети с несколькими клиентами
Здравствуйте! Помогите,пожалуйста с задачей. Мне нужно написать программу синхронизации папок по сети с несколькими...

Сервер с клиентами которые работают по глобальной сети
Как сделать сервер который буде работать не по локальной сети, а по глобальной, т. е. сервер отправляет клиентам сообщения по глобальной...

Сервер для чата
Здравствуйте. Я начинающий С++ программист. Пишу разные задачи для практики. Хочу попробовать написать сервер для чата. Я как-то боюсь...

Сервер для чата
Добрый день форумчане!;) У меня есть вопрос к Вам. Начала писать приложение на Андроид и столкнулась с таким вопросом- сервер для...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru