AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

System.Net.Sockets

Ein Thema von Kanonier · begonnen am 7. Dez 2004
Antwort Antwort
Kanonier

Registriert seit: 19. Nov 2004
Ort: Gelsenkirchen
19 Beiträge
 
#1

System.Net.Sockets

  Alt 7. Dez 2004, 13:46
So ich habe mich die letzten tage etwas mit den Socket-Klasse von .Net beschäftigt. Habe mir vorallem die beispiele zum asynchronen Client und Server angeschaut gibt es leider nur für C# und VB. Jetzt habe ich versucht diese in Delphi umzusetzten. Klappt aber nicht ganz musste erstens ManualResetEvent durch tEvent ersetzten, weil ich die Set Funktion nicht compieliert bekomemn hab.


Hier mein Code.
Delphi-Quellcode:
program SocketServer;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  System.Net.Sockets,
  System.Threading,
  System.Net,
  SyncObjs ;

type AsynchronousSocketListener = class
  public

  constructor Create;
  procedure StartListening;
  private
    allDone: TEvent;
  procedure AcceptCallBack(ar: IAsyncResult);
end;

constructor AsynchronousSocketListener.Create;
begin
  inherited Create;
  allDone := TEvent.Create(nil, False, False, '');
end;

procedure AsynchronousSocketListener.StartListening;
var Listener: Socket;
    Port: Integer;
    localEndPoint: IPEndPoint;
    ipHostInfo: IPHostEntry;
    localipAddress: IPAddress;
begin
try
  //Hostparamter
  Port := 1024;
  ipHostInfo := Dns.Resolve(Dns.GetHostName());
  localipAddress := ipHostInfo.AddressList[0];
  localEndPoint := IPEndPoint.Create(localipAddress, Port);
  //Ein Socket Initialiesieren
  Listener := Socket.Create(localEndPoint.AddressFamily,
                            SocketType.Stream,
                            ProtocolType.Tcp);
  //Den Socket einbinden
  Listener.Bind(localEndPoint);
  Listener.Listen(100);
  while(True) do
  begin
    allDone.Resetevent;
    //Den Socket in listen schalten
    Writeln('Server gestartet');
    Listener.BeginAccept(AsyncCallback(AsynchronousSocketListener.AcceptCallBack), Listener);
    // Wait until a connection is made before continung.
    allDone.WaitFor(50000);
  end;
  except
    writeln('öfnen eines Servers gescheitert');
  end;
end;

procedure AsynchronousSocketListener.AcceptCallBack(ar: IAsyncResult);
var Listener: Socket;
begin
  Listener := Socket(ar.AsyncState);
  Listener.EndAccept(ar);
  Writeln('Ein Client Connected');
  Listener.Shutdown(SocketShutdown.Both);
  Listener.Close;
  writeln('Verbindung beendet');
  allDone.SetEvent;
end;

var myserver: AsynchronousSocketListener;

begin
  myserver := AsynchronousSocketListener.Create;
  myserver.StartListening;
  { TODO -oUser -cConsole Main : Hier Code einfügen }
end.
Leider wird immer eine Ausnahme geworfen sobald
Listener.BeginAccept(AsyncCallback(AsynchronousSocketListener.AcceptCallBack), Listener); Ausgeführt wird.
Kennt sich einer damit aus ??
Wenn es dich einmal erwischt hat erwischt es dich immer häufiger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz