Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2000-09

Sockets Unit - Multiple Clients (Long)

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Unknown author

Can someone help me out with the sockets unit. I've successfully created a multi-client server using the NetDemo sample, but I'd like some further details on how the SSOCKETS unit is intended to be used...

The following simple program works, but the server automatically STOPS listening as soon a client connects. Where should the clients be managed? During the OnConnect event? Perhaps there should be a list of clients and each time one connects, it gets added to the list in the OnConnect event. I'm just a little unclear as to how the connection is maintained. Each new client should be able to send to the server and the server should acknowledge and/or respond to each one.

If anyone can shed some light on the intentions of the SSOCKETS unit, it would be greatly appreciated.

Thank you (and sorry for the long post)...

program ssockserv;
uses ssockets;
type
  TSockServerApp = class(TObject)
  private
    FServer: TInetServer;
  protected
    procedure Listen;
  public
    procedure Run;
    procedure OnConnectQuery(Sender: TObject; ASocket: Longint; Var Allow:
Boolean);
    procedure OnConnect(Sender: TObject; Data: TSocketStream);
    constructor Create(port: word);
  end;
  constructor TSockServerApp.Create(port: word);
  begin
    FServer := TInetServer.Create(port);
    FServer.OnConnectQuery := @OnConnectQuery;
    FServer.OnConnect := @OnConnect;
  end;
  procedure TSockServerApp.Listen;
  begin
    FServer.SetNonBlocking;
    FServer.StartAccepting;
  end;
  procedure TSockServerApp.OnConnectQuery(Sender: TObject; ASocket:
Longint; Var Allow: Boolean);
  begin
    Writeln('OnConnectQuery Event.');
  end;
  procedure TSockServerApp.OnConnect(Sender: TObject; Data:
TSocketStream);
  begin
    Writeln('OnConnect Event.');
  end;
  procedure TSockServerApp.Run;
  begin
    Self.Listen;
  end;
const
  DEFAULT_PORT = 6543;
var
  MyApplication: TSockServerApp;
begin
  MyApplication := TSockServerApp.Create(DEFAULT_PORT);
  MyApplication.Run;
  MyApplication.Free;
end.

Reply by email