Работа с сокетами на VCL
Нам надо переслать текст с одного компа на другой (это простейший пример, от него идут все остальные)
1 комп (клиент, посылает сообшение) - прога №1
2 комп (сервер, принимает его)- пргоа №2
Прога №1:
TClientSocket1 кидаем на форму.
Заполняем поля:
ServerSocket1 кидаем на форму.
Заполняем поля:
Используя ServerSocket1->Socket->Connections[i ]->SendText("Текст мессаги для клиента");
i - номер соединения, т.е. для отправки мессаг всем присоединившимся к серверу надо:
для клиента: ClientSocket1->Close();
для сервера: ServerSocket1->Close();
Узнать имя своего компа в сети:
1 комп (клиент, посылает сообшение) - прога №1
2 комп (сервер, принимает его)- пргоа №2
Прога №1:
TClientSocket1 кидаем на форму.
Заполняем поля:
ClientSocket1->Port = 1100; // почти любой, лучше после 1000Коннектимся к серваку:
ClientSocket1->Host = "Server"; // кому идёт мессага
ClientSocket1->Open(); //можно ClientSocket1->Active = true;Отсылаем мессагу:
ClientSocket1->Socket->SendText("Хай!"); // это сообшение получит серверПрога №2:
ServerSocket1 кидаем на форму.
Заполняем поля:
ServerSocket1->Port = 1100; // должен быть одинаковым с клиентомФункция обработчик события "Пришла мессага":
void __fastcall TfmMain::ServerSocket1ClientRead (TObject *Sender, TCustomWinSocket *Socket)Как серверу послать мессагу клиенту?
{ AnsiString sMsg = Socket->ReceiveText(); // полученный текст
ShowMessage(sMsg);
}
Используя ServerSocket1->Socket->Connections[i ]->SendText("Текст мессаги для клиента");
i - номер соединения, т.е. для отправки мессаг всем присоединившимся к серверу надо:
for (int i = 0; i < ServerSocket1->Socket->ActiveConnections; i++)Соответственно послать мессагу последнеиу присоединившемуся к серверу:
ServerSocket1->Socket->Connections[i ]->SendText("Текст мессаги для клиента");
int lu = ServerSocket1->Socket->ActiveConnections - 1;У клиента функция-обработчик события пришла мессага аналогичен серверному, называеться
ServerSocket1->Socket->Connections[lu]->SendText("Текст последнему клиенту");
void __fastcall TfmMain::ClientSocket1Read (TObject *Sender, TCustomWinSocket *Socket)Закрыть соединение:
для клиента: ClientSocket1->Close();
для сервера: ServerSocket1->Close();
Узнать имя своего компа в сети:
ServerSocket1->Open();
AnsiString CompName = ServerSocket->Socket->LocalHost;
ServerSocket1->Close();