![]() |
TserverSocket zur laufzeit erzeugen mit event
Hi,
ich habe ein kleines Problem, ich will in einem Programm Tserversockets mit unterschiedlichen Ports dynamisch erzeugen. Ich habe das ganze mal in einer Testanwendung probiert nur leider funktioniert es nicht so ganz..... Hier mal der Quelltext meiner Testanwendung:
Delphi-Quellcode:
Hab mal im Quelltext die Fehlerstellen makiert. Der Fehler lautet: EAccess Violation in Projekt1.exe an der makierten Stelle.
type
TNotifyEvent = procedure(sender : TObject) of object; type TForm1 = class(TForm) ServerSocket1: TServerSocket; Button1: TButton; Button2: TButton; ClientSocket1: TClientSocket; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } Servers : array of TServerSocket; public { Public-Deklarationen } procedure sockeEvent(sender : TObject; Socket: TCustomWinSocket); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.sockeEvent(sender : TObject; Socket: TCustomWinSocket); begin showmessage(TServerSocket(sender).Name); <--- Einfacher test ob was ankommt! end; procedure TForm1.Button1Click(Sender: TObject); <--- Nur dazu da eine auf Kommando zu erzeugen. begin Servers[0].Create(self); <--- Hier kommt die Fehlermeldung!! with Servers[0] do begin parent := self; name := 'SS0'; ServerType:=stNonBlocking; ThreadCacheSize:=10; OnClientRead:=sockeEvent; Port:=12345; Active:=true; end; end; Ich hoffe mal ihr seht mehr als ich, ich finde einfach meinen Fehler nicht....... Gruß Masteric |
Re: TserverSocket zur laufzeit erzeugen mit event
Zitat:
Delphi-Quellcode:
Gruss
Servers[0] := TServerSocket.create
wo |
Re: TserverSocket zur laufzeit erzeugen mit event
Liste der Anhänge anzeigen (Anzahl: 1)
leider nein, da möchte er bei dem create(<-Hier noch einen Parameter haben->) und wenn ich da nil oder self einsetze kommt die selbe Fehlermeldung....
Gruß Masteric PS: Im Anhang ist mal die exakte Fehlermeldung, falls sie hilft. |
Re: TserverSocket zur laufzeit erzeugen mit event
Zitat:
und self sollte eigentlich richtig sein Gruss wo |
Re: TserverSocket zur laufzeit erzeugen mit event
Hallo Masteric.
Versuchs mal so.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp; //-- wegen TServerSocket type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; ClientSocket1: TClientSocket; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure Button2Click(Sender: TObject); private FNextPort: Word; FServerArray : array of TServerSocket; procedure ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocketClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FNextPort := 15000; end; procedure TForm1.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add( 'Ein Client hat sich mit folgendem eindeutigen Socket verbunden. Socket: ' + inttostr(Socket.SocketHandle) ); end; procedure TForm1.ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add( 'Ein Client hat sich mit folgendem eindeutigen Socket abgemeldet. Socket: '+ inttostr(Socket.SocketHandle) ); end; procedure TForm1.ServerSocketClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Memo1.Lines.Add( 'Ein Clientverbindung mit folgendem eindeutigen Socket: ' + inttostr(Socket.SocketHandle) + ' hat einen Fehler verursacht, der socket Fehlercode:' + inttostr(ErrorCode) ); end; procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); var cbRcv: integer; RcvBuf: array [0..32767] of Byte; s: string; begin cbRcv := Socket.ReceiveBuf(RcvBuf[0], Length(RcvBuf)); if (cbRcv > 0) and (Socket.SocketHandle > 0) then begin SetLength(s, cbRcv); move(RcvBuf[0], s[1], cbRcv); Memo1.Lines.Add('Für Client mit folgendem eindeutigen Socket: ' + inttostr(Socket.SocketHandle) + ' wurden ' + IntToStr(cbRcv) + ' Bytes ' + 'mit folgenden Daten [ ' + s + ' ] empfangen' ); end; end; procedure TForm1.Button1Click(Sender: TObject); begin inc(FNextPort); SetLength(FServerArray, Length(FServerArray) + 1); FServerArray[Length(FServerArray) -1] := TServerSocket.create(nil); with FServerArray[Length(FServerArray) -1] do begin Name := 'A' + IntToStr(FNextPort); ServerType := stNonBlocking; Port := FNextPort; Service := ''; OnClientConnect := ServerSocketClientConnect; OnClientDisconnect := ServerSocketClientDisconnect; OnClientError := ServerSocketClientError; OnClientRead := ServerSocketClientRead; Active := true; end; end; procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); var s: string; begin s := 'Hello world!'; if Socket.SendBuf(s[1], Length(s)) <> Length(s) then raise exception.Create('Fehler beim Senden'); end; procedure TForm1.Button2Click(Sender: TObject); begin ClientSocket1.Active := true; end; end. lg. Astat |
Re: TserverSocket zur laufzeit erzeugen mit event
besten danke habs hinbekommen vielen vielen Dank
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 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