Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Сокеты   Найти похожие ветки 

 
ZLOFENIX ©   (2006-01-03 06:54) [0]

У меня такой вопроспо: мне надо с одного приложения подключится одновременно к 2 ИЛИ БОЛЬШЕ серверам, подскажите как это сделать ?
Или при помощи 1 сервера подключиться к 2 ?


 
FrykT ©   (2006-01-03 10:13) [1]

Сокеты создаешь динамически и хранишь на них ссылки в динамическом массиве, или в экземпляре класса TList.
Ну например массив Clients: array of TClientSoscket;
Вот для примера:

unit fmSockets;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ScktComp;

type
 TForm1 = class(TForm)
   ClientSocket1: TClientSocket;
 private
   { Private declarations }
 public
   { Public declarations }
   procedure SocketRead(Sender: TObject; Socket: TCustomWinSocket);
   procedure SocketError(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   procedure SocketClose(Sender: TObject; Socket: TCustomWinSocket);
   procedure SocketConnect(Sender: TObject; Socket: TCustomWinSocket);
   function ConnectClient(AHost: string; APort: Integer): boolean;
 end;

var
 Form1: TForm1;
 Clients: array of TClientSocket;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.ConnectClient(AHost: string; APort: Integer): boolean;
var
 Client: TClientSocket;
begin
 Result := false;
 Client := TClientSocket.Create(self);
 Client.Host := AHost;
 Client.Port := APort;
 Client.ClientType := ctNonBlocking;
 Client.OnConnect := SocketConnect;
 Client.OnDisconnect := SocketClose;
 Client.OnRead := SocketRead;
 Client.OnError := SocketError;
 try
   Client.Open;
 except
   Client.Free;
   exit;
 end;
 SetLength(Clients, Length(Clients) + 1);
 Clients[Length(Clients)] := Client;
 Result := true;
end;

procedure TForm1.SocketClose(Sender: TObject; Socket: TCustomWinSocket);
var
 I: Integer;
 Client: TClientSocket;
begin
 for I:= Length(Clients) -1 downto 0 do
   if Clients[I].Socket = Socket then
   begin
     Client := Clients[I];
     Clients[I] := nil;
     Client.Free;
     break;
   end;
end;

procedure TForm1.SocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 //ONCONNECT
end;

procedure TForm1.SocketError(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 ErrorCode := 0;
end;

procedure TForm1.SocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
 buf: string;
begin
 //ONREAD
 //пример:
 buf := Socket.ReceiveText;
end;

end.


 
FrykT ©   (2006-01-03 10:14) [2]

поправка:
Clients[Length(Clients) - 1] := Client;


 
ZLOFENIX ©   (2006-01-04 02:00) [3]

спасибо
вопрос исчерпан



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.032 c
2-1144120842
Vitalik__
2006-04-04 07:20
2006.04.16
Определение региональных настроек


11-1124640908
hunn
2005-08-21 20:15
2006.04.16
Форму в центр


4-1138280826
Kolan
2006-01-26 16:07
2006.04.16
Помогите разобраться с небольшим участком код...


2-1143980731
Khim
2006-04-02 16:25
2006.04.16
Нажатие кнопок меню на TAppBuilder


1-1141989695
Александр Б.
2006-03-10 14:21
2006.04.16
Интерфейс, и потоки