Страница 1 из 1

Ошибка в приложении 'List Index out of bounds (0)'

Добавлено: 26 ноя 2010, 13:19
Oleg_Rus
Доброго всем времени суток, Господа.

Недавно начал программировать на С++ Builder 6. Пишу чат для локальной сети. Проблема: При отправке сообщения в сеть выдает ошибку 'List Index out of bounds (0)'.

Что это и как его едят? )))

Сразу даю исходники программы:

Код: Выделить всё

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  ServerSocket1->Active = true;
  Button2->Enabled = false;
  Button4->Enabled = true;
  Memo1->Lines->Add("Сервер создан");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  Edit3->Text=ClientSocket1->Host;
  Edit3->Text=ClientSocket1->Address;
  ServerSocket1->Active=true;
  Button2->Enabled=false;
  Button4->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Клиент присоединился");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Вы присоединены");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (Edit2->Text == "")
  { ShowMessage("Введите ваш ник!");
    return;}
  if (Edit1->Text == "")
  { ShowMessage("Введите сообщение!");
    return;}
  Memo1->Lines->Add(Edit2->Text+": "+Edit1->Text);
  if (ServerSocket1->Active == true)
  { ServerSocket1->Socket->Connections[0]->SendText(Edit2->Text+": "+Edit1->Text);
    Edit1->Text = "";}
  else
  { ClientSocket1->Socket->SendText(Edit2->Text+": "+Edit1->Text);
    Edit1->Text = "";}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add(Socket->ReceiveText());        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------

Re: Ошибка в приложении 'List Index out of bounds (0)'

Добавлено: 26 ноя 2010, 15:28
azrael
Если не ошибаюсь, ServerSocket1->Active выдаст true даже если Connections ни одного нет, поэтому надо проверять, существует ли Connections[0].

Re: Ошибка в приложении 'List Index out of bounds (0)'

Добавлено: 26 ноя 2010, 16:45
Oleg_Rus
Azrael, не подскажешь как его можно проверить? Какое свойство за это отвечает и как до него достучаться? )

Re: Ошибка в приложении 'List Index out of bounds (0)'

Добавлено: 29 ноя 2010, 10:32
azrael
ServerSocket1->Socket->ActiveConnections, проверьте, что больше нуля.

Re: Ошибка в приложении 'List Index out of bounds (0)'

Добавлено: 29 ноя 2010, 19:08
Oleg_Rus
спс большое