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

Вниз

Как правильно написать socks-сервер?   Найти похожие ветки 

 
Сергей М. ©   (2008-01-17 15:47) [40]

А в ехе знаешь ?)
рассказывай) ..


 
zSergey   (2008-01-17 15:54) [41]

> Сергей М.
Кидаешь на форму, выставляешь свойства, прописываем методы, компилишь проект. Вот собственно, так ... По логике тогда выходит что форму месте с компонентами нужно скомпилить как dll. Так ?


 
Сергей М. ©   (2008-01-17 16:03) [42]


> Кидаешь на форму


Для того чтобы создать экзеимпляр класса (не важно какого - будь он хоть TServerSocket хоть любой другой), вовсе не обязательно кидать его на форму.

Достаточно вызвать его конструктор явно:

SomeObject := TSomeComponentClass.Create(владелец);

В кач-ве владельца можешь на первое время указать nil


 
DVM ©   (2008-01-17 16:44) [43]


> zSergey

Если очень хочется именно кидать, можно кидать на TDataModule


 
Сергей М. ©   (2008-01-17 17:09) [44]


> DVM ©   (17.01.08 16:44) [43]


Кстати, к вопросу о батонокидательстве, - да, своевременный коментарий.


 
Slym ©   (2008-01-18 05:32) [45]

zSergey   (17.01.08 15:41) [39]
применение: rundll32.exe CharGen32.dll,StartCharGen 19


library CharGen32;

uses
 SysUtils,ScktComp,Windows,WinSock;

type
 TCharGenThread=class(TServerClientThread)
 protected
   procedure ClientExecute; override;
 end;

procedure TCharGenThread.ClientExecute;
var i:integer;
begin
 Randomize;
 while (not Terminated) and ClientSocket.Connected do
 begin
   try
     i:=Random(MaxInt);
     ClientSocket.SendBuf(i,SizeOf(i));
   except
     Terminate;
     HandleException;
   end;
 end;
end;

procedure GetThread(Self:TObject;Sender: TObject;ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
begin
 Writeln("Connected ",ClientSocket.RemoteAddress,":",ClientSocket.RemotePort);
 SocketThread:=TCharGenThread.Create(false,ClientSocket);
end;

function Proc2Method(Code, Data: Pointer):TMethod;
begin
 result.Code:=Code;
 result.Data:=Data;
end;

Function StartCharGen(hWnd: Integer;hInstance: Integer;lpCmdLine: PChar;dummy: Longint): Integer; StdCall; export;
var ServerSocket:TServerWinSocket;
 Port:integer;
begin
 Win32Check(AllocConsole);
 try
   Port:=StrToIntDef(ParamStr(1),19);
   ServerSocket:=TServerWinSocket.Create(INVALID_SOCKET);
   try
     ServerSocket.ThreadCacheSize := 3;
     ServerSocket.OnGetThread:=TGetThreadEvent(Proc2Method(@GetThread,ServerSocket));
     ServerSocket.Listen("", "", "", Port, SOMAXCONN);
     writeln("Listen port ",Port);
     while ServerSocket.Connected do
       Sleep(1000);
   finally
     ServerSocket.Free;
   end;
 finally
   FreeConsole;
 end;
 Result := 0;
end;

exports StartCharGen;

begin

end.


 
glebbest   (2008-04-30 22:00) [46]

>>применение: rundll32.exe CharGen32.dll,StartCharGen 19

Если я правильно понял код, подключившийся в 19 порт telnet должен непрерывно выводить числа. Не выводит. Перенес код в exe для трейса - управление в GetThread не передаётся никогда.


 
Сергей М. ©   (2008-05-02 23:40) [47]


> Перенес код в exe для трейса


Это еще зачем ?


 
Slym ©   (2008-05-04 04:35) [48]

ServerSocket.ServerType:=stThreadBlocking;


 
Slym ©   (2008-05-04 04:44) [49]

Приведеный код был приведен на "урезанном" ScktComp :) у тебя об не урезанный...
пример простого эха- возвращает клиенту что тот ему отправил на стандартном ScktComp

program EchoDefSckt;
{$APPTYPE CONSOLE}
uses
 SysUtils,ScktComp,WinSock;

type
 TServerClientThreadEx=class(TServerClientThread)
 protected
   procedure ClientExecute; override;
 end;

procedure TServerClientThreadEx.ClientExecute;
var
 Buf:array[byte] of char;
 i:integer;
begin
 try
   while (not Terminated) and ClientSocket.Connected do
   begin
     i:=ClientSocket.ReceiveBuf(Buf,SizeOf(Buf));
     if i<=0 then
       ClientSocket.Close;
     ClientSocket.SendBuf(Buf,i);
   end;
 except
   Terminate;
   HandleException;
 end;
end;

procedure GetThread(Self:TObject;Sender: TObject;ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
begin
 writeln("GetThreadEvent ",ClientSocket.RemoteAddress,":",ClientSocket.RemotePort);
 SocketThread:=TServerClientThreadEx.Create(false,ClientSocket);
end;

function Proc2Method(Code, Data: Pointer):TMethod;
begin
 result.Code:=Code;
 result.Data:=Data;
end;

var Server:TServerSocket;
begin
Server:=TServerSocket.Create(nil);
try
  Server.ServerType:=stThreadBlocking;
  Server.Port:=19;
  Server.OnGetThread:=TGetThreadEvent(Proc2Method(@GetThread,Server));
  Server.Open;
  while Server.Active do Sleep(100);
finally
  Server.Free;
end;
end.


 
имя   (2008-12-04 09:43) [50]

Удалено модератором



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

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

Наверх




Память: 0.56 MB
Время: 0.009 c
2-1281113383
nik9632
2010-08-06 20:49
2010.10.31
Ищу удачный вариант участка кода программы


15-1279664536
Кто б сомневался
2010-07-21 02:22
2010.10.31
Права файлов на сервере


2-1280927589
mylasthit
2010-08-04 17:13
2010.10.31
Подмогите с выбором компонента...


15-1279531274
Anatoly Podgoretsky
2010-07-19 13:21
2010.10.31
Настал момент такой


15-1279788012
Медвежонок Пятачок
2010-07-22 12:40
2010.10.31
хочется волшебства