Solved

Freepascal Lnet open multiple sockets

Posted on 2009-04-02
1
1,557 Views
Last Modified: 2013-11-11
I need a bit of help with app. I am using lnet and synaser and trying to open multiple sockets. While I can create the sockets, I can only open the first one called. Any Ideas?
//UNIT1

      begin

           server1 := TTCPEchoDaemon1.Create;

           ServerSer := TServerSerial.Create;

           ServerSer.Execute;

           server1.Run;

      end; 

//EO UNIT1
 
 

//UNIT2

constructor TTCPEchoDaemon2.Create;

begin 

  FCon := TLTCP.Create(nil);

  FCon.OnReceive := @OnRe;

  FCon.Timeout := 100; // responsive enough, but won't hog cpu

  FCon.ReuseAddress := True;

end;
 

Constructor TServerSerial.Create;

begin

  Fser:=TBlockserial.create;

//  FreeOnTerminate:=true;

//  inherited create(false);

end; 
 

procedure TTCPEchoDaemon1.OnRe(aSocket: TLSocket);

var

  s: string;

  n: Integer;

begin

  if aSocket.GetMessage(s) > 0 then begin // if we received anything (result is in s)

//   Writeln('Got: "', s, '" with length: ', Length(s)); // write message and it's length

    RecvString(s); //catch full string

    FCon.IterReset; // now it points to server socket

  end;

end;
 

procedure TTCPEchoDaemon1.Run;

var

  Quit: Boolean; // main loop control

  Port: Word;    // the port to connect to

begin
 

    try

      Port := Word(StrToInt(SysPort1)); // try to parse port from argument

    except

      on e: Exception do begin

        Writeln(e.message);

        Halt;

      end;

    end;

    Quit := false;
 

    if FCon.Listen(Port) then begin // if listen went ok

    Writeln('Server running! on '+SysPort1);

       repeat

        FCon.Callaction; // eventize the lNet

      until Quit; // until user quit

    end; // listen

end; 
 

procedure TServerSerial.Execute;

begin

   with Fser do

    begin

    RaiseExcept:=false;

    Connect(PortNo);

     WriteLn('Serial Port Connected');

     Config(Baud,databits,parity,stopbits ,softwarefl,hardwarefl);

      if active = true then begin

         while not (LastError <> 0) do begin

            if lastError<>0 then break;

              if canread(1000) then  begin

              LCMD := Recvstring(1000);

              WriteLn(LCMD);

              myconverterfunc1:=@CallConv1;

              myconverterfunc1(LCMD);

              end;

         end;

      end;

    end;

end; 
 

function TTCPEchoDaemon1.RecvString(S2: String): AnsiString;

var

  n : integer;

  Stringtest : String;

begin

    n := 1;

    while n <= Length(S2) do begin

          if S2[n] = LF then begin

          myconverterfunc1:=@CallConv1;

          myconverterfunc1(Stringtest);

          stringtest := '';

          Delete(S2, n, 1);

          Continue;

          end;

    Stringtest := Stringtest+Copy(S2, n, 1);

    inc(n);

    end;
 

end;          
 

//EO UNIT2

Open in new window

0
Comment
Question by:lloydie-t
1 Comment
 

Accepted Solution

by:
lloydie-t earned 0 total points
ID: 24055693
Seems  what I need is Threads.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Pass a string reference from one unit to another 8 108
error when doin maven update 2 92
problem when i try to pack my dll file with upx 9 71
Online file editor, manager 6 56
In our object-oriented world the class is a minimal unit, a brick for constructing our applications. It is an abstraction and we know well how to use it. In well-designed software we are not usually interested in knowing how objects look in memory. …
Here is a helpful source code for C++ Builder programmers that allows you to manage and manipulate HTML content from C++ code, while also handling HTML events like onclick, onmouseover, ... Some objects defined and used in this source include: …
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.
The viewer will learn how to use and create new code templates in NetBeans IDE 8.0 for Windows.

947 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now