Создание сетевого чата
(на 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);
// …отправить сообщение серверу
}
Вот и все! Готовый проект вы
можете посмотреть здесь.