>   ShellExecute(Application.Handle, 'open', @ClientFileName, @ClientParams,
> @ClientDir, SW_SHOW);

I'm not sure you can use ShellExecute to inherit handles. Use CreateProcess 
which has a parameter
bInheritHandles.

> to server with "telnet 127.0.0.1 5000"... The client project is executed,
> but show message "10038".

Error 10038 means you pass a handle to winsock that is not a socket handle. In 
your case, the handle
is not inherited from the parent process.

--
[EMAIL PROTECTED]
http://www.overbyte.be


----- Original Message ----- 
From: "Arnoldo - Optextil" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
Sent: Tuesday, May 24, 2005 3:23 PM
Subject: Re: [twsocket] Telnet


> Hi,
>
> About redirect the connection, I created two small projects, exemplify the
> problem !
>
> Server:
>
> unit UServer;
>
> interface
>
> uses
>   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
>   Dialogs, WSocket, SHELLAPI;
>
> type
>   TForm1 = class(TForm)
>     SrvSocket: TWSocket;
>     procedure FormCreate(Sender: TObject);
>     procedure SrvSocketSessionAvailable(Sender: TObject; ErrCode: Word);
>   private
>     { Private declarations }
>   public
>     { Public declarations }
>   end;
>
> var
>   Form1: TForm1;
>
> implementation
>
> {$R *.dfm}
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
>   SrvSocket.Close;
>   SrvSocket.Addr  := '0.0.0.0';  { Use any interface for listening }
>   SrvSocket.Proto := 'tcp';
>   SrvSocket.Port  := '5000';
>   SrvSocket.Listen;
> end;
>
> procedure TForm1.SrvSocketSessionAvailable(Sender: TObject; ErrCode: Word);
> var
>   ClientFileName, ClientParams, ClientDir : array [0..255] of char;
>   NewHSocket : TSocket;
> begin
>   NewHSocket := SrvSocket.Accept;
>   StrPCopy(@ClientFileName, 'c:\rf\projectcliente.exe');
>   StrPCopy(@ClientParams, ''+ inttostr(newhsocket));
>   StrPCopy(@ClientDir, 'c:\rf\');
>   ShellExecute(Application.Handle, 'open', @ClientFileName, @ClientParams,
> @ClientDir, SW_SHOW);
> end;
>
> Client:
>
> unit UCliente;
>
> interface
>
> uses
>   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
>   Dialogs, WSocket, Spin, StdCtrls, Buttons, WinSock;
>
> type
>   TForm2 = class(TForm)
>     Socket: TWSocket;
>     Memo: TMemo;
>     procedure SocketDataAvailable(Sender: TObject; ErrCode: Word);
>     procedure FormCreate(Sender: TObject);
>   private
>     { Private declarations }
>   public
>     { Public declarations }
>   end;
>
> var
>   Form2: TForm2;
>
> implementation
>
> {$R *.dfm}
>
> procedure TForm2.SocketDataAvailable(Sender: TObject; ErrCode: Word);
> var
>     Buffer : array [0..1023] of char;
>     Len : Integer;
> begin
>   Len := Socket.Receive(@Buffer, SizeOf(Buffer) - 1);
>   if Len <= 0 then
>      Exit;
>
>   Buffer[Len]       := #0;
>   Memo.lines.add(StrPas(Buffer));
> end;
>
> procedure TForm2.FormCreate(Sender: TObject);
> var
>   NewHSocket : TSocket;
> begin
>   if  paramcount = 1 then
>       Begin
>         caption := ParamStr(1);
>         NewHSocket := StrToIntDef(ParamStr(1),0);
>         Socket.Dup(NewHSocket);
>       End;
> end;
>
> Running this example, the server is listen on port 5000, on prompt I connect
> to server with "telnet 127.0.0.1 5000"... The client project is executed,
> but
> show message "10038".
>
> When you say: "Once you have the
> socket handle for the accepted connection, you may start another process,
> make it inherit the handle and let him process the connection. The second
> process may use TWSocket and receive the inherited handle using Dup(). "
>
> The implementation above is correct ? If not, have a sample ?
>
> Thanks
>
> Arnoldo
>
> ----- Original Message ----- 
> From: "Francois PIETTE" <[EMAIL PROTECTED]>
> To: "ICS support mailing" <twsocket@elists.org>
> Sent: Saturday, May 21, 2005 4:41 AM
> Subject: Re: [twsocket] Telnet
>
>
> >> I'm not reinventing the wheel. I saw your samples programs about
> >> TWSocketServer too. My problem not is work with various instances of
> >> clients. My problem is when the client connect the server, the server
> >> redirect the connection to another application. I have the Socket.Accept,
> > I
> >> run another application, in this another application who I do establish
> >> connection with the client ? It's possible ?
> >
> > Altough I have nerver done this, I think it is possible. Once you have the
> > socket handle for the accepted connection, you may start another process,
> > make it inherit the handle and let him process the connection. The second
> > process may use TWSocket and receive the inherited handle using Dup(). You
> > have somewhat to split TWSocketServer in two parts. The listening part
> > stay
> > in one process and the client handling goes into another one.
> >
> > --
> > [EMAIL PROTECTED]
> > http://www.overbyte.be
> >
> >
> > -- 
> > To unsubscribe or change your settings for TWSocket mailing list
> > please goto http://www.elists.org/mailman/listinfo/twsocket
> > Visit our website at http://www.overbyte.be
>
>
>
> -- 
> To unsubscribe or change your settings for TWSocket mailing list
> please goto http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be
>


-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to