Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
70
Добавлен:
27.03.2015
Размер:
379.39 Кб
Скачать

Работаем с сетью. Сервер (класс tServerSocket)

Приступаем к написанию сервера. Для этого создайте новый проект, на форме разместрите Edit (в нем будут появляется отправленные с клиента данные), кнопку (по ней сервер начнет слушать сеть) и компонент ServerSocket с вкладки Internet:

Начинаем менять свойства. Для кнопки свойство Caption измените на "Слушать", свойство Text для Edit установите в "" (пустую строку), свойство Port для серверного сокета установите в 2000 (как и у клиентского сокета).

После всего наша форма будет выглядеть приблизительно так:

Теперь добавим код для кнопки :

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ServerSocket1->Active=true;

}

Теперь сервер начинает слушать сеть по 2000 порту, ожидая, когда к нему подсоединится клиент.

Осталось добавить коды для сокета - а именно код, выполняющийся при установке соединения и код, выполняющийся при получении данных от клиента. Для этого переходим в Инспекторе объектов на вкладку Events при выбранном сокете ServerSocket1 и создаем двойным щелчком заготовки кода для OnClientConnect (этот код будет выполняться при подсоединении клиента) и OnClientRead (этот код будет выполняться при получении данных от клиента).

В заготовках напишите следующий код:

void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,

TCustomWinSocket *Socket)

{

Form1->Caption="Клиент подсоединился";

}

Тут мы просто показываем в заголовке формы, что клиент подсоединится.

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,

TCustomWinSocket *Socket)

{

Edit1->Text=Socket->ReceiveText();

}

Полученные от клиента данные будут показаны в Edit1.

Теперь испытываем наше творение. Запускаем сервер, нажимаем в нем на кнопку "Слушать". Далее запускаем клиента, нажимаем в нем на кнопку "Подсоединится". В сервере заголовок формы поменяется на "Клиент подсоединился". Теперь в клиенте печатаем что-нибудь в Edit'е и нажимаем на кнопку "Отправить". То, что мы отправили, покажется вEdit'е на сервере:

Пересчитываем компоненты на форме

Это может оказаться полезным для разных задач - например, вы хотите одновременно изменить положение всех элементов формы или просто определить, есть ли среди элементов элемент с определенными свойствами.

Для нашей задачи мы будем использовать свойство Controls формы. Это свойство представляет из себя набор всех дочерних элементов формы - кнопок, Edit'ов,Label'ов и т. п. Каждый элемент этого набора имеет тип TControl (родительский тип для всех элементов).

Вот пример кода, который сдвигает все элементы на форме к левому краю формы:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

TControl *child; //Переменная для элемента формы

for(int i = 0; i < Form1->ControlCount; i++)

{

child = Form1->Controls[i]; //Берем очередной элемент

child->Left=10; //Сдвигаем его влево на 10 пиксел

}

}

Как вы видите, мы получаем i-элемент на форме просто указав его индекс.

Нумерация при этом, как и следовало ожидать, идет с нуля. Для получения же общего количества элементов мы используем свойство ControlCount:

... i < Form1->ControlCount; ...