I think you will need to pass the handle as a stdin handle using CreateProcess, rather than just passing an integer on the command line. Otherwise, the handle will be specific to your server process and invalid in the client process.

Dan

----- Original Message ----- From: "Arnoldo - Optextil" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
Sent: Tuesday, May 24, 2005 2: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