Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
2-1280816243
skat
2010-08-03 10:17
2010.10.31
Можно ли вставлять в БД Paradox файлы(любые)


15-1279911922
antonn
2010-07-23 23:05
2010.10.31
посоветуйте по поводу музыки =)


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


15-1279744174
Юрий
2010-07-22 00:29
2010.10.31
С днем рождения ! 22 июля 2010 четверг


15-1279890684
aka
2010-07-23 17:11
2010.10.31
Сетевая игра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский