Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.doc
Скачиваний:
11
Добавлен:
12.02.2016
Размер:
35.33 Кб
Скачать

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

(http://www.delphisources.ru/pages/faq/base/tcp_many_comps.html)

Оформил: DeeCo

Автор: 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...

Позже напишу статью о том, как пересылать через сокеты любую информацию, не только текстовую, а также как пересылать потоки...

Соседние файлы в папке Статті