Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

2.2. Создание клиентского приложения

Создать клиентское приложение, имеющее вид, представленный на рис.З.

Рис. 3

Клиентское приложение должно выполнять следующие действия.

  1. Инициализировать интерфейс сокетов с помощью функции WSAStartup.

  1. Создать сокет с помощью функции socket.

  2. Установить соединение с сервером с помощью функции connect.

  3. Передать данные на сервер с помощью функции send.

  4. Получить ответ от сервера в эхорежиме с помощью функции recv.

  5. Вывести эхоответ на экран.

  6. Закрыть сокет с помощью функции CloseSocket.

  7. Прекратить работу с интерфейсом сокетов с помощью функции WSACleanup.

Для выполнения перечисленных действий в событие OnClick командной кнопки «Переслать сообщение» запишите следующий программный код:

procedure TForm1.Button1Click(Sender: TObjecl);

VAR

s: TSocket; {Сокет}

recipient, sender_socket: TSockAddr; {адреса сокета получателя и сокета отправителя}

ret: Integer; {результат работы функций}

wsd: WSADATA; {Структура WSADATA, требуется для инициализации интерфейса сокетов}

bufr: Array[0..90] of char; {буфер для передачи данных на сервер}

msgstring: Array[0..90] of char {буфер для вывода сообщения на экран};

bufs: Array [1..80] of char; {буфер для получения ответа от сервера}

size_socket: Integer; {размер структуры TSockAddr}

begin

// Инициализация интерфейса сокетов

If WSAStartup(MAKEWORD(2,2),wsd)<>0

then ShowMessageFmt(‘Ошибка %d при инициализации интерфейса

сокетов', [WSAGetLastError])

else

begin

// Создание сокета клиента

s :=socket(AF_INET, SOCK_STREAM,0);

if s=INVALID_SOCKET

then

ShowMessageFmt(‘Ошибка %d при создании сокета',

[WSAGetLastError])

else

begin

// Формирование адреса сервера (получателя сообщения)

ZeroMemory(@recipient, sizeof(recipient));

recipient.sin_family :=AF_INET;

recipient.sin_port:=htons(2000);

recipient.sin_addr.S_addr := inet_addr('192.168.0.2');

// Установление соединения

ret:=connect(s, recipient, sizeof(recipient));

If ret=SOCKET_ERROR then

ShowMessageFmt('Ошибка %d при установлении соединения',

[WSAGetLastError])

else

begin

//Передаваемое сообщение

strcopy(@bufs, 'Это мой тест');

// Передача сообщения серверу

ret := send(s, bufs, sizeof(bufs), 0);

If геt=SOCКЕТ_ERROR then

ShowMessageFmt('Ошибка %d при передаче данных',

[WSAGetLastError]);

ZeroMemory(@bufr, sizeof(bufr)):

Size_socket := Sizeof(sender_socket);

// Получение ответа от сервера

ret:=recv(s, bufr, sizeoа(bufr), 0);

If ret=SOCKET _ERROR then

ShowMessageFmt('Ошибка %d при получении ответа',

[WSAGetLastError])

else

begin

//Формирование сообщения msgstring дня вывода на экран

StrCopy(@msgstring, 'Получен ответ:');

StrCat(@msgstring, @bufr);

StrCat(@msgstring,' от');

StrCat(@msgstring, inet_ntoa(recipient.sin_addr));

ShowMessage(msgstring);

end;

end;

// закрытие сокета

Close.Socket(s);

end;

WSACleanup:

end;

end;.

2.3. Исследование возможностей функций Winsock по передаче данных между различными компьютерами в сети

Исследовать возможности функций Winsock по передаче данных между различными компьютерами в сети. Для этого:

  • установите клиентскую и серверную программы на разных компьютерах и попытайтесь передавать данные между ними;

  • составьте программу веления диалога в сети на основании приведенной клиент-серверной программы.

ЛИТЕРАТУРА.

  1. Джонс Э., Оланд Дж. Программирование в сетях MicrasoftWindows. Мастер-класс /Пер. с англ. М., Издательско-торговый дом «Русская ре­дакция», 2002. 608 с.

  2. Снейдер Й. Эффективное программирование TCP/IP. Библиотека программиста. СПб., Питер, 2001. 320 с.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. С помощью каких функций Winsock устанавливает соединение?

  1. Опишите алгоритм работы серверного приложения для работы с ТСР-протоколом.

  2. Опишите алгоритм работы клиентского приложения для работы с TCP-протоколом.

  3. Назначение функции listen.

  4. Назначение функции accept.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]