Entwickler-Ecke

Internet / Netzwerk - Tserversocket im "Hardcore Pascal"


olliistmeinname - So 12.10.03 18:59
Titel: Tserversocket im "Hardcore Pascal"
Hi ! Ich hab so ein kleines Problem . Ich möchte die Komponenten Tserversocket/Tclientsocket nicht in eine Unit , die zu einem Form gehört , initialisieren , sondern ohne Forms in der Projektdatei. Doch es klappt irgendwie nicht. Ich bekomme eine exception. :twisted: :twisted:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
program Project1;

uses
  windows,shellapi,ScktComp;

{$R *.res}

var
serversocket1 : tserversocket;


begin
serversocket1.Active := true;   <-- Hier tritt der Fehler auf
end.

thx schon mal :D

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


MSCH - So 12.10.03 19:26

mit der Deklaration einer Variablen ist es nicht getan!!

du must


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var 
serversocket1 : tserversocket; 


begin 
  ServerSocket1:= TServerSocket.create;// <- Erst erstellen
 // Ports und Adressen nicht vergessen zu setzen !!  
  serversocket1.Active := true;   <-- dann zugreifen!! 
end.


grez
msch


olliistmeinname - So 12.10.03 19:31

THX !!



Quelltext
1:
ServerSocket1:= TServerSocket.create(serversocket1);                    


Da fehlte noch serversocket1 aber es geht !

mfg OLLI


MrSaint - So 12.10.03 20:54

wäre vielleicht auch anzumerken, dass du das dingens nach gebrauch wieder freigeben solltest ;) sonst gibts datenmüll im RAM und das mögen andere Programmierer gar net ;) könnte dann in irgendwelchen "unerklärlichen" exceptions von anderen Programmen enden... also: immer schön aufräumen ;)


Quelltext
1:
ServerSocket1.Free;                    


MrSaint


olliistmeinname - So 12.10.03 22:18

So !

Jetzt bin ich soweit und habe die Komponente implementiert , aber da kommen schon die nächsten Probleme .

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
program projekt1;

uses
 windows ,ScktComp, Dialogs ;
{$R *.res}

procedure ServerSocket1ClientRead(Sender: TObject;
 socket: TCustomWinSocket);
var s :string;

begin
s := socket.ReceiveText;
showmessage(s);
end;


begin
serversocket1.active := true;
...
...
end.

Ich dachte mir , dass wenn der Client eine Nachricht an den Server geschickt hätte , die Procedure ausgeführt werden müsse. Ich dachte wieder falsch.

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


olliistmeinname - Di 14.10.03 07:24

Bitte :) Das Ist seht wichtig :) Jemand weiß doch sicher die Lösung :?


MrSaint - Di 14.10.03 11:38

versuch mal vorher das zu setzen:


Quelltext
1:
ServerSocket1.OnClientRead:=ServerSocket1ClientRead;                    



müsste dann so gehn, wenn du das vor

Quelltext
1:
serversocket1.Active := true;                    


setzt....


MrSaint


olliistmeinname - Di 14.10.03 14:09

Geht nicht. Er meint , dass seien inkompatible Typen : Methodenzeiger und Reguläre Prozedur.


barfuesser - Di 14.10.03 14:18

Das ist OK, Du mußt dem Methodenzeigen schon eine Objektmethode übergeben.

barfuesser


olliistmeinname - Di 14.10.03 14:52


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
program test;


uses
 windows ,messages,ScktComp,Dialogs ;
{$R *.res}


procedure ServerClientRead(Sender:TObject;socket:TCustomWinSocket);
var s :string;
begin
s := socket.ReceiveText;
showmessage(s);
end;


var
serversocket1 : tserversocket;
label
start;

begin
serverSocket1:= TServerSocket.create(serversocket1);
Serversocket1.OnClientRead:=ServerClientRead; <<< Hier gibt es den Fehler beim kompilieren.
serversocket1.Active := true;

start:
sleep(100);
goto start;

end.



Irgendwas mache ich falsch :(


barfuesser - Di 14.10.03 15:03

Ich glaube zur Lösung Deines Problems, solltest Du Dir erst einmal Grundlagen der objektorientierten Programmierung mit Delphi aneignen.

Zum zweiten wird mir immer ganz anders, wenn ich in Quelltexten auf Label oder einen GoTo-Befehl stoße.

barfuesser


olliistmeinname - Di 14.10.03 15:10

Wenn ich das mit Forms mache , dann gibt es keine Probleme.
Man kann da ja mit einem Klick auf dem Objektinstpektor Proceduren definieren etc. Aber wenn man keine Forms benutzt , muss man das selber machen , was sonst Delphi übernimmt , oder ?
Naja das Problem besteht immer noch ...


barfuesser - Di 14.10.03 15:41

Wenn Du das mit Forms machst, dann werden automatisch Objekte erstellt. Und diese haben Methoden und keine Prozeduren. Wenn Du ohne Forms arbeiten möchtest, dann mußt Du trotdem Objektorientiert programmieren. Du mußt also eine Klasse erstellen, von der Du dann Objekte erzeugst. Und in dieser Klasse mußt Du dann eine Methode erzeugen, die Du an das Event übergeben kannst.

barfuesser