![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ClientSocket
Profik © (2005-07-22 15:32:00)Нада простенький пример пересылки стринги через сокеты
Profik (2005-07-22 16:19:00) [21]//Сканирование сети
var u,result,i:integer;
Computer : Array[1..500] of String[25];
ComputerCount : Integer;
s:string;
ss:string[2];
Size : cardinal;
PRes : PChar;
BRes : boolean;
svernuto: boolean;
........
procedure FindAllComputers(Workgroup: String);
Var
EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : Cardinal;
Entries : Cardinal;
Result : Integer;
begin
ComputerCount := 0;
Workgroup := Workgroup + #0;
FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
With WorkgroupRS do begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @Workgroup[1];
end;
WNetOpenEnum( RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0,
@WorkgroupRS,
EnumHandle );
Repeat
Entries := 1;
BufSize := SizeOf(Buf);
Result :=
WNetEnumResource( EnumHandle,
Entries,
@Buf,
BufSize );
If (Result = NO_ERROR) and (Entries = 1) then begin
Inc( ComputerCount );
Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);
delete(Computer[ ComputerCount ],1,2);
form1.ComboBox1.Items.Add(Computer[ ComputerCount ]);
end;
Until (Entries <> 1) or (Result <> NO_ERROR);
WNetCloseEnum( EnumHandle );
end; { Find All Computers }
Wm.DIGGER (2005-07-22 16:18:00) [22]Digitman © (22.07.05 16:03) [3]
а что тебе не нравится?
вообще-то всё работает и очень хорошо!
Digitman (2005-07-22 16:03:00) [23]
> Wm.DIGGER © (22.07.05 15:38) [2]
отсебячина
Wm.DIGGER (2005-07-22 15:38:00) [24]Пример сервера:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ServerSocket1: TServerSocket;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Memo1.Clear;
Form1.ServerSocket1.Port := 65000;
Form1.ServerSocket1.ServerType := stNonBlocking;
Form1.ServerSocket1.Active := true;
Form1.Button1.Enabled := false;
Form1.Button2.Enabled := true;
Form1.Memo1.Lines.Append('Запуск сервера ... Запущен.');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
while Form1.ServerSocket1.Active do Form1.ServerSocket1.Active := false;
Form1.Memo1.Lines.Append('Остановка сервера ... Остановлен');
Form1.Button1.Enabled := true;
Form1.Button2.Enabled := false;
end;
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Слушаем порт: '+ IntToStr(Form1.ServerSocket1.Port));
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Клиент подключился.');
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Подключается клиент ...');
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Клиент отключился.');
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Form1.Memo1.Lines.Append('Ошибка при подключении: '+IntToStr(ErrorCode));
ErrorCode := 0;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('');
Form1.Memo1.Lines.Append('Получено сообщение от клиента');
Form1.Memo1.Lines.Append('> '+Socket.ReceiveText);
// 0 - номер подключившегося клиента ...
Form1.ServerSocket1.Socket.Connections[0].SendText('Ну, и иди ты :)))' + #13#10);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Button2Click(nil);
end;
end.
Пример клиента:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, Registry, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;
type
TForm1 = class(TForm)
Button1: TButton;
ClientSocket1: TClientSocket;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.ClientSocket1.Port := 65000;
Form1.ClientSocket1.Host := '127.0.0.1';
Form1.ClientSocket1.Active := true;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('');
Form1.Memo1.Lines.Append('Получен ответ от сервера');
Form1.Memo1.Lines.Append('> ' + Socket.ReceiveText);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Button3Click(nil);
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Form1.Memo1.Lines.Append('Ошибка: ' +inttostr(ErrorCode));
ErrorCode := 0;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Подключён к ' + Form1.ClientSocket1.Host + ' [ ' + inttostr(Form1.ClientSocket1.Port) + ' ] ');
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Подключаюсь ... ');
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append('Отключен.');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Form1.ClientSocket1.Active then Form1.ClientSocket1.Socket.SendText('Привет!!! Я типа клиент!' + #13#10);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
while Form1.ClientSocket1.Active do Form1.ClientSocket1.Active := false;
end;
end.
Digitman (2005-07-22 15:37:00) [25]он у тебя перед носом - в каталоге с демо-проектами в составе Делфи-поставки