TClientSocket & TServerSocket

TClientSocket & TServerSocket


Макагон Сергей


В C++Builder 6 для передачи какой-либо информации по сети удобнее всего использовать компоненты закладки Internet: TClientSocket и TServerSocket.


Чтобы лучше разобраться в работе этих компонентов я предлагаю написать простенький сетевой чат, на примере которого можно будет легко увидеть компоненты в действии.


Для начала создадим новый проект(File->New->Application), поместим на форму компоненты:


TClientSocket и TServerSocket , чтобы наша программа могла быть и клиентом и сервером (не одновременно конечно ;) ).


Далее разместим компонент TMemo (закладка Standart) - в нем как вы догадались будет отображаться текст чата.


Следующим на форму нужно кинуть компонент TEdit (Standart) - в него мы будем писать текcт, который нужно отправить собеседнику.


Ну и конечно тяжело обойтись без кнопки отправить - кидаем на форму TButton . Кроме того что уже есть на форме, нам еще понадобится три кнопки и два эдита (TEdit) (их назначение описывается по ходу обращения к ним) .


Итак, наформе :


ClientSocket1 и ServerSocket1


Memo1


Edit1,Edit2,Edit3


Button1,Button2,Button3,Button4


Теперь изменяем свойства:


Button1->Caption на "Отправить"


Button2->Caption на "Создать"


Button3->Caption на "Соединиться" и


Button4->Caption на "Отключить" .


Убираем текст во всех Эдитах . Свойство Memo1->ReadOnly = true ,


ClientSocket1->Host - нужно написать IP-адрес сервера к которому вы будете присоеденяться


(IP-адресс устанавливается в настройках соединения Windows), если прописать 127.0.0.1 , то вы будете конектиться к себе на компьютер (так удобно делать, когда проверяешь на работоспособность свою программу. Запустив ее дважды, одна клиент с 127.0.0.1 , а другая сервер !) если же вы коннектитесь к другу, то заранее договоритесь какой будет Ай-Пи-адрес (143.0.0.5 - например). Но для того чтобы Ай-Пи -адресс можно было легко сменить, мы и положили на форму один из Эдитов, его текст при коннекте и будет отвечать свойству ClientSocket1->Host и ClientSocket1->Address .


В свойстве ClientSocket1->Port и ServertSocket1->Port - должны стоять одинаковые значения, чтобы Сервер и Клиент прослушивали и работали на один порт . Число можно выбрать любое (1024 например).


Кнопку "Отключиться" изначально нужно сделать недоступной(Enabled = false)так как вначале отсоеденяться нам нет от кого .


Дальше опишем обработчики событий для кнопок "Создать", "Соединиться", "Отключить" .


Кнопка "Создать" - активизирует сервер. Он начинает прослушивать порт на коннект со стороны клиента .


void __fastcall TForm1::Button2Click(TObject *Sender)


{


ServerSocket1->Active = true ;


// Делаем недоступную "Соединиться" (так как мы уже сервер)


Button3->Enabled = false


// Делаем доступную "Отключиться" (понятно зачем)


Button4->Enabled = true


Memo1->Lines->Add("Серверсоздан") ;


}


Так наша программа стала сервером !


Давайте опишем клиента!(Кнопка "Соединиться")


В Edit3->Text впишите 127.0.0.1 - предполагается что тестироваться будет на одном компьютере (что б других не заморачивать:)


void __fastcall TForm1::Button3Click(TObject *Sender)


{


Edit3->Text = ClientSocket1->Host // ПрисваиваемКлиентуАй-ПиизЭдита

<
br />

Edit3->Text = ClientSocket1->Address


ServerSocket1->Active = true ;


// Делаем недоступную "Создать" (так как мы коннектимся)


Button2->Enabled = false


// Делаем доступную "Отключиться" (понятно зачем)


Button4->Enabled = true


}


Вот Вы и написали тот минимум который надо для освоения компонентов !


Но кто хочет останавливаться ? А чат доделать ! Правильно пишем дальше:


Дальше будем описывать свойства компонентов Клиента и Сервера OnConnect (когда присоединился) .


void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,


TCustomWinSocket *Socket)


{


Memo1->Lines->Add("Клиентприсоединился");


}


Это когда вы сервер и к Вам присоединились, на Мемо появится надпись !


Для клиента почти так само :


void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,


TCustomWinSocket *Socket)


{


Memo1->Lines->Add("Выприсоединены");


}


Понятно, да ? Отлично , дальше остается только рассказать Вам зачем Edit2 на форме и описать кнопку "Отправить" .


Итак, Эдит2 нам нужен для Вашего ника ! Ведь какой чат без ника !


Теперь самое главное - описание кнопки "Отправить :


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); }


else


{ ClientSocket1->Socket->SendText(Edit2->Text+"::"+Edit1->Text);}


Edit1->Text = "" ;


}


Теперь разберемся с этой кучей кода :


//добавляем свое сообщение себе в Мемо


Memo1->Lines->Add(Edit2->Text+":: "+ Edit1->Text) ;


if (ServerSocket1->Active == true){ServerSocket1->Socket->


Connections[0]->SendText(Edit2->Text+"::"+Edit1->Text)};


Если мы сервер, то посылаем нашу строку первому в списке клиенту ( чат розщитан на двоих ) , иначе :


else {


ClientSocket1->Socket->SendText(Edit2->Text+"::"+Edit1->Text);


}


Посылаем строку серверу !


Независимо от того кто мы (клиент-сервер)


Очищаем Эдит1 :


Edit1->Text = "" ;


Также надо описать прием информации и занесение ее в Мемо1. Делается это обработчиком события OnRead у TClientSocket и TserverSocket :


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()) ;


}


Вот вроди бы и все. С TClientSocket и TserverSocket разобрались , а кого заинтересовала тема чата, заходите в раздел "Мои программы" И качайте доделанную мной, с большим колличеством настроек программу вместе с исходниками.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: TClientSocket & TServerSocket

Слов:795
Символов:7867
Размер:15.37 Кб.