Организация связи между компьютерами через TCP и IP протокол
Оформил: 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...
Позже
напишу статью о том, как пересылать через сокеты любую информацию,
не только текстовую, а также как пересылать потоки...
|