Как узнать в элементе ServerSocket в OnConnection, какое по счету подключение?

ziqp

Всем привет. Возник вопрос: как можно узнать в элементе ServerSocket в OnConnection какое идет по счету подключение? Мне необходимо сделать, если пытается подключиться больше, чем 1 человек одновременно на клиенте выскакивала ошибка
6 ответов

ziqp

if(ServerSocket1->Socket->ActiveConnections>1)
?


ziqp

Спасибо! Но как определять какое именно по счету это подключение, чтобы отослать именно этому пользователю сообщение?


ziqp

ziqp, Тут одновременно все просто и не просто. Когда клиент отключается, то идет смещение позиций, так что нет смысла привязываться к номеру подключения.Если Вы хотите отправить ответ клиенту, что только что вам прислал сообщение. то тут все просто:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
   Socket->SendText("мой  ответный текст");
}
//---------------------------------------------------------------------------
Если Вы хотите в любое время отправить любому подключению сообщение, то нужно кое что допиливать.


ziqp

Не совсем понял.. Мне нужно, если клиент подключился и он один, то сервер отправляет ему данные (файл). А если одновременно, например, второе подключение, то сервер отправляет сообщение клиенту, мол подождите чутка. С первым пунктом я разобрался. А как быть со вторым? В примере
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
   Socket->SendText("мой  ответный текст");
}
почему это находится в событии onClientRead, а не в onConnection?


ziqp

почему это находится в событии onClientRead, а не в onConnection?
Это я как пример написал, если вдруг такая задача..но, выходит, будет так:
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket)
{
if(ServerSocket1->Socket->ActiveConnections>1)
  {
     Socket->SendText("Я занят, чутка попозже");
     Socket->Close();
  }
}
//---------------------------------------------------------------------------


ziqp

Спасибо. Просто событие ClientRead сбило с толку)