Форум: "Сети";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
ВнизSocket.Data Найти похожие ветки
← →
DrimS (2003-08-08 14:37) [0]У ServerSocket есть свойство DATA типа Pointer, хотелось бы при подключении клиента к серверу в это свойство записывать некоторуюю информацию и потом ее использовать. Видел такой пример там присваивание идет в событии OnGetSocket, а потом используется где угодно. Например можно было бы вытаскивать информацию по каждому подключению в цикле... если есть пример с этим свойством, прошу описать или прислать на почту...
← →
panov (2003-08-08 14:43) [1]TCustomWinSocket.Data - обычный указатель.
Присваиваешь ему ссылку на Record(например) и работаешь.
Конечно, надо не забывать выделять и удалять память под структуры или перменные, которые используются.
Самый простой пример: Data используется для идентификации.
Хотя в этом примере есть неправильность(Нарушение уникальности при удалении из SockList).
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
SockList: TList;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SockList := TList.Create;
ServerSocket1.Port := 5000;
ServerSocket1.Open;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SockList.Free;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.Data := pointer(SockList.Add(Socket));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
Sock: TCustomWinSocket;
begin
if SockList.Count=0 then
begin
ShowMessage("No active connections!");
Exit;
end;
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Integer(Sock.Data)=1 then
begin
Sock.SendText("Socket N "+IntToStr(i));
Exit;
end;
end;
ShowMessage("Socket not found!");
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i: Integer;
Sock: TCustomWinSocket;
begin
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Sock=Socket then
begin
SockList.Delete(i);
Exit;
( "Disconnect:Socket not found!") TCustomWinSocket.Data - обычный указатель.
Присваиваешь ему ссылку на Record(например) и работаешь.
Конечно, надо не забывать выделять и удалять память под структуры или перменные, которые используются.
Самый простой пример: Data используется для идентификации.
Хотя в этом примере есть неправильность(Нарушение уникальности при удалении из SockList).
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
SockList: TList;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SockList := TList.Create;
ServerSocket1.Port := 5000;
ServerSocket1.Open;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SockList.Free;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.Data := pointer(SockList.Add(Socket));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
Sock: TCustomWinSocket;
begin
if SockList.Count=0 then
begin
ShowMessage("No active connections!");
Exit;
end;
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Integer(Sock.Data)=1 then
begin
Sock.SendText("Socket N "+IntToStr(i));
Exit;
end;
end;
ShowMessage("Socket not found!");
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i: Integer;
Sock: TCustomWinSocket;
begin
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Sock=Socket then
begin
SockList.Delete(i);
Exit;
end;
end;
ShowMessage("Disconnect:Socket not found!");
end;
end.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c