Создание сетевого чата

(на Borland C++Builder 6)

 

Сие предлагаю в качестве учебного пособия по сокетам.

 

Откройте С++Builder. Там есть вкладки с компонентами. Перейдите на вкладку Internet. Создайте на форме TClientSocket и TServerSocket, которые назовите cli & ser. Создайте также TMemo и кнопки с названиями «Создать сервер» и «Подключиться к серверу». В первой кнопке напишите:

 

Chat->ser->Port = StrToInt(Edit1->Text); // присвоить номер порта, который будет «слушать» сервер

Chat->ser->Open(); // «открыть» сервер (присвоить true его active)

 

IP-адрес (аля 255.255.255.255) будет взят с машины. Локально (т.е. не подключен к Internet, ни к локальной сети) – 127.0.0.1; А вообще, никто не мешает Вам открыть вкладку Indy Misc и поместить на форме TIdIPWatch1. Узнается он IdIPWatch1->CurrentIP. Во второй кнопке напишите:

 

Chat->cli->Address = Edit1->Text; // присвоить IP-адрес машины, на которой работает сервер

Chat->cli->Port = StrToInt(Edit2->Text); // присвоить номер порта, который «слушает» сервер

Chat->cli->Open(); // «открыть» клиент (присвоить true его active)

 

Откройте панель событий сервера. Там найдите событие OnClientRead, дважды нажмите и напишите:

 

AnsiString s = Socket->ReceiveText(); // получаем текст

 

for(int i = 0; i < ser->Socket->ActiveConnections; i++)

{

ser->Socket->Connections[i]->SendText(s); // отправляем текст клиенту, чей номер храниться в i

}

 

            Memo1->Lines->Add(s); // добавляем в Memo сервера

 

Теперь перейдем к панели событий клиента. Дважди нажав на OnRead напишите:

 

AnsiString s = Socket->ReceiveText(); // получаем текст

Memo1->Lines->Add(s); // добавляем в Memo клиента

 

Теперь создаем кнопку «Отправить текст». В нем пишем:

 

if(Chat->ser->Active) // если сервер активирован…

{

for(int i = 0; i < Chat->ser->Socket->ActiveConnections; i++)

{

Chat->ser->Socket->Connections[i]->SendText(Opt->Edit1->Text+": "+Chat->Edit1->Text);

// … то отправить всем сообщения …

}

 

Chat->Memo1->Lines->Add(Opt->Edit1->Text+": "+Chat->Edit1->Text); // …и о себе не забыть

}

 

if(Chat->cli->Active) // если же клиент активирован…

{

Chat->cli->Socket->SendText(Opt->Edit1->Text+": "+Chat->Edit1->Text);

// …отправить сообщение серверу

}

 

Вот и все! Готовый проект вы можете посмотреть здесь.

 

 НАЗАД

Hosted by uCoz