это то что по сути тебе надо
| Цитата | Изготовлением первой части мы сейчас и займемся. Запускаем Delphi и помещаем на форму компонент ServerSocket с вкладки Internet палитры компонентов: Больше нам ничего не понадобится. Все, что нужно дополнительно указать, так это порт, через который будут связываться наши программы. Я задавал 7766. Берите что-нибудь похожее больше 5000 — не ошибетесь. Кликаем дважды по нашей форме и в обработчике пишем:
procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm:=false; ServerSocket1.Port:=7766; ServerSocket1.Active:=true; end;
Этим кодом мы прячем главную форму, устанавливаем порт (его можно изменять, но главное — чтобы у клиента и сервера значения port были одинаковы) и активируем наш сервер. Теперь он висит в памяти в непрерывном ожидании сообщения от клиента. В качестве домашнего задания модифицируйте этот код так, чтобы при запуске сервер прописывал себя на автозагрузку системы. Сделать это легко, если вы внимательно ознакомились с первым пунктом данной статьи. Теперь займемся самим обработчиком сообщений. Выделяем на форме наш компонент ServerSocket и на вкладке Events инспектора объектов дважды кликаем по свойству OnClienRead:
procedure TForm1.ServerSocket1 ClientRead(Sender: TObject;Socket: TCustomWinSocket); begin MessageBox(0,PCHAR(Socket.ReceiveText),"Windows XP", MB_ICONERROR); end;
Как видим, на экран выбрасывается окно с заголовком "Windows XP" , содержащее строку, пришедшую к нам от клиента в переменной Socket. ReceiveText. Если с написанием сервера все довольно просто, то создание клиента потребует немного больше времени. Как-никак это ваше основное оружие . Создаем новый проект и помещаем на форму два Edit'а, две кнопки Button и компонент ClientSocket с вкладки Internet палитры компонентов: Для начала заведем глобальную переменную булевского типа, которая будет устанавливаться в true при удачном соединении с сервером.
var Form1: TForm1; isconnect:boolean=false;
В первом поле должен быть введен IP-адрес машины, на которой должен быть запущен сервер. При нажатии на кнопку Button1 пробуем соединиться:
procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Address:=Edit1.Text; ClientSocket1.Port:=7766; ClientSocket1.Active:=true; end;
Не забудьте, что перед нажатием на кнопку нужно ввести в поле Edit1 IP-адрес машины противника вида "xxx. xxx.xxx.xxx" (без кавычек), и у клиента и работающего сервера должны совпадать номера порта (в данном случае 7766). Для отслеживания удачного соединения или не менее удачного разъединения выделите Client Socket и в событиях управляйте свойствами OnConnect и OnDisconnect соответственно:
procedure TForm1.ClientSocket1 Connect(Sender: TObject; Socket: TCustomWinSocket); begin ShowMessage('Соединение успешное!'); isconnect:=true; end;
procedure TForm1.ClientSocket1 Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin ShowMessage('Соединение разорвано сервером!'); isconnect:=false; end;
В случае успешного или неуспешного соединения с сервером мы получим соответствующее сообщение. Осталось только в поле Edit2 ввести нужный текст и нажать Button2:
procedure TForm1.Button2Click(Sender: TObject); begin if isconnect then ClientSocket1.Socket.SendText(edit2. text) else ShowMessage('Нет соединения!'); end;
| |