![]() |
System.Net.Sockets
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:
Leider wird immer eine Ausnahme geworfen sobald
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.
Delphi-Quellcode:
Ausgeführt wird.
Listener.BeginAccept(AsyncCallback(AsynchronousSocketListener.AcceptCallBack), Listener);
Kennt sich einer damit aus ?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz