Недавно добавленные исходники

•  TDictionary Custom Sort  2 693

•  Fast Watermark Sources  2 562

•  3D Designer  4 208

•  Sik Screen Capture  2 869

•  Patch Maker  3 078

•  Айболит (remote control)  2 905

•  ListBox Drag & Drop  2 505

•  Доска для игры Реверси  74 727

•  Графические эффекты  3 327

•  Рисование по маске  2 544

•  Перетаскивание изображений  2 131

•  Canvas Drawing  2 206

•  Рисование Луны  2 139

•  Поворот изображения  1 711

•  Рисование стержней  1 742

•  Paint on Shape  1 221

•  Генератор кроссвордов  1 809

•  Головоломка Paletto  1 452

•  Теорема Монжа об окружностях  1 818

•  Пазл Numbrix  1 357

•  Заборы и коммивояжеры  1 618

•  Игра HIP  1 104

•  Игра Go (Го)  1 062

•  Симулятор лифта  1 232

•  Программа укладки плитки  1 014

•  Генератор лабиринта  1 327

•  Проверка числового ввода  1 092

•  HEX View  1 271

•  Физический маятник  1 141

•  Задача коммивояжера  1 173

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Организация связи между компьютерами через TCP и IP протокол



Автор: CyANiD

Конечно, перед вами наверняка вставала проблема организации связи, ну или хотя бы вы желали установить её для разных целей..:)
Я попробую вам помочь. Для плодотворной работы у вас должны быть хоть какие-нибудь навыки программирования на Delphi, вы должны хоть чуть-чуть знать о TCP/IP и как это работает, ну и самое главное - сокеты. Может конечно попозже вы разберетесь, что это такое, но эту статью я рассчитываю на тех людей, кто хоть слышал это слово...
Программируя на Delphi, я писал различные программы, но вскоре стал интересоваться, как организовать связь между компьютерами, как переслать информацию. Стал лазить по всей палитре компонентов и увидел что-то похожее на розетку, в которую втыкают шнур, и розетку, которую очень бережно держит чья-то рука. Как потом после чтения Help'а оказалось, что это компоненты для работы с сокетами. На тот момент я уже имел представления о них, поэтому понял сразу, что это то, что мне нужно. Эти компоненты называются TClientSocket и TServerSocket. Как понятно из названий, один обеспечивает серверную часть, другой клиентскую.
Чтобы подсоединить клиент к серверу, клиенту необходимо указать адрес сервера (IP-адрес или имя). Это свойства Address (IP) и Host (Имя). В целом присоединиться можно только по одному параметру, но по IP - быстрее. Сами подумайте почему...
Еще одним главным параметром является рабочий порт сервера. Кстати заметьте, что в TServerSocket его необходимо указывать тоже. Как уже наверное вы поняли, указанный порт в клиенте должен совпадать с портом, указанного у сервера. Для обычной связи остальные параметры можно не менять. Я бы сказал их вообще лучше даже не менять.
Возникает резонный вопрос, так как все же присоединиться. Чтобы это осуществить, сначала запускаем сервер. Делаеться это просто: в обработчике событий (любом, будь то onClick или onCreate) пишем "ServerSocket1.Active:=True;". Тем самым мы запустили сервер. Чтобы присоединить клиент делаем тоже самое для TClientSocket.
Какие события обрабатываются при подсоединении, отсоединении, ошибке, я думаю вы поймете сами. Интересней, какие события возникают при получении информации. Когда сервер получает информацию обрабатываеться onClientRead, хотя интуиция склоняет в сторону onClientWrite. Здесь она неправа.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket:
  TCustomWinSocket);
var
  Str: string;
  RemIP: string;
begin
  RemIP := Socket.RemoteAddress;
  Str := Socket.ReceivedText;
end;
После этого в переменной Str содержится полученное сообщение(текстовое), а в переменной RemIP - адрес отправителя сообщения.
Для посылки сообщения с сервера клиентам следует написать процедуру
procedure TForm1.SendMes(Text: String);
var
  i: byte;
begin
  with ServerSocket1.Socket do
  begin
    if ActiveConnections>
    0 then
      for i := 0 to ActiveConnections - 1 do
      try
        Connections[i].SendText(Text);
        Application.ProcessMessages;
      except
        //
      end;
  end; {/WITH}
end;
ServerSocket1.Socket.Connections - это массив всех сокетных соединений. Можно конечно работать с каждам отдельно...
У TClientSocket дело обстоит примерно также, поэтому описывать его не стану. Скажу, что у клиента при получении информации обрабатываеться onRead...
Позже напишу статью о том, как пересылать через сокеты любую информацию, не только текстовую, а также как пересылать потоки...




Похожие по теме исходники

Сообщения между процессами Windows

RSA шифрование через OpenSSL

TCP / IP Monitor

TCP / IP Packet Generator

 



Copyright © 2004-2023 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте