Сделать стартовой

Всё для администраторов

Объявление

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



c++builder 6>>

Сообщений 1 страница 30 из 229

1

В 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 // Присваиваем Клиенту Ай-Пи из Эдита
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 разобрались , а кого заинтересовала тема чата, заходите в раздел "Мои программы" И качайте доделанную мной, с большим количеством настроек программу вместе с исходниками

0

2

3

сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
tuchkasсайтсайт

0

4

Econ

0

5

134.1

0

6

Bett

0

7

Bett

0

8

Kobo

0

9

Abba

0

10

Wird

0

11

Piet

0

12

Loui

0

13

Spla

0

14

Cent

0

15

Deko

0

16

Bist

0

17

Norm

0

18

Abra

0

19

Ridl

0

20

Vali

0

21

OZON

0

22

Seni

0

23

Wind

0

24

Lawr

0

25

Rich

0

26

Olga

0

27

Lili

0

28

Kazi

0

29

Spik

0

30

Else

0