Форум: "Сети";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
Вниз
Как правильно написать 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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.005 c