Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование Socketов в Delphi.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
153.6 Кб
Скачать

Практика и примеры

Пример, в котором по сокету передаются и принимаются текстовые сообщения:

Пример 1. Посылка/прием текстовых сообщений по сокетам

{... Здесь идет заголовок файла и определение формы TForm1 и ее экземпляра Form1} {В форму нужно поместить две кнопки TButton и три TEdit. При нажатии на первую кнопку вызывается обработчик события OnClick - Button1Click. Перед этим в первый из TEdit-ов нужно ввести хост-имя, а во второй - порт удаленного компьютера. После установления соединения можно посылать текстовые сообщения, вводя текст в третий TEdit и нажимая вторую кнопку TButton. Чтобы отсоединиться, нужно еще раз нажать первую TButton. Еще нужно добавить TListBox, в который будем помещать принятые и отправленные сообщения. НЕ ЗАБУДЬТЕ ПОМЕСТИТЬ В ФОРМУ КОМПОНЕНТ TClientSocket!} procedure Button1Click(Sender: TObject); begin   {Если соединение уже установлено - прерываем его.}   if ClientSocket1.Active then begin     ClientSocket1.Close;     Exit; {...и выходим из обработчика}   end;   {Присваиваем свойствам Host и Port нужные значения}   ClientSocket1.Host := Edit1.Text;   ClientSocket1.Port := StrToInt(Edit2.Text);   {Пытаемся открыть сокет и установить соединение}   ClientSocket1.Open; end; procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin   {Как только произошло соединение - посылаем приветствие}   Socket.SendText('Hello!');   ListBox1.Items.Add('< Hello!'); end; procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin   {Если пришло сообщение - добавляем его в ListBox}   ListBox1.Items.Add('> '+Socket.ReceiveText); end; procedure Button2Click(Sender: TObject); begin   {Нажата кнопка - посылаем текст из третьего TEdit}   ClientSocket1.Socket.SendText(Edit3.Text);   ListBox1.Items.Add('< '+Edit3.Text); end;

ПРИМЕЧАНИЕ: В некоторых случаях (зависящих от сервера) нужно после каждого сообщения посылать перевод строки:   ClientSocket1.Socket.SendText(Edit3.Text+#10);

Посылка/прием сложных данных

Иногда необходимо пересылать по сети не только простые текстовые сообщения, но и сложные структуры (тип record в Паскале), или даже файлы. И тогда Вам необходимо использовать специальные операторы. Некоторые из них перечислены ниже:

Методы TClientSocket.Socket:

  • SendBuf(var Buf; Count: Integer) - Посылка буфера через сокет. Буфером может являться любой тип, будь то структура (record), либо простой Integer. Буфер указывается параметром Buf, вторым параметром Вы должны указать размер пересылаемых данных в байтах (Count);

  • SendText(const S: string) - Посылка текстовой строки через сокет. Этот метод рассматривался в примере 2 (см.выше);

  • SendStream(AStream: TStream) - Посылка содержимого указанного потока через сокет. Пересылаемый поток должен быть открыт. Поток может быть любого типа - файловый, из ОЗУ, и т.д. Описание работы непосредственно с потоками выходит за рамки данной статьи;