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

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

При реализации клиентского приложении выполнить следующие пункты.

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

Рис. 3

2) Подключить библиотеку сокетов. Для этого в блок uses добавить библиотеку Winsock:

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Winsock;.

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

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

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

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

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

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

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

procedure TForm1.Button1Click(Sender: TObject);

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(МАКЕWORD(2,2), wsd )<>0

Then ShowMessageFmt('Ошибка %d при инициализации интерфейса сокетов', [WSAGetLastError])

else

begin

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

s := socket(AF_INET, SOCK_DGRAM,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');

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

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

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

ret := sendto(s, bufs, sizeof(bufs), 0, recipient, sizeof(recipient));

If ret=SOCKET _ERROR then

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

[WSAGetLastError]);

ZeroMemory(@bufr, sizeof(bufr));

Size_socket := Sizeof(sender_socket);

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

ret := recvfrom(s, bufr, sizeof(bufr), 0, sender_socket, size_socket);

If ret=SOCKET_ERROR then

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

[WSAGetLastError])

Else

begin

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

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

StrCat(@msgstring, @bufr);

StrCat(@msgstring,' от');

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

ShowMessage(msgstring);

End;

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

CloseSocket(s);

end;

WSACleanup;

End;

end;.

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

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

  • Измените приложение таким образом, чтобы можно было передавать на сервер любые сообщения, вводимые с клавиатуры.

ЛИТЕРАТУРА

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

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

3. Джамса К., Коуп К. Программирование для INTERNET в среде Windows /Пер. с англ. СПб., Питер, 1996. 688 с.

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

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

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

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

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

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

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