Autor Beitrag
Snibb
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 26.07.07 14:14 
Hallo,

ich bin neu hier ^^. Ich schreibe gerade ein Programm, ohne VCL, das heisst ohne
dass das mit den Events so einfach geht. Und zwar habe ich jetzt eine Klasse für
ein Socket geschrieben, damit das einfacher ist.

ausblenden volle Höhe Delphi-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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
type
  sockclient = class
  private
    socket: TClientSocket;
    procedure ClientRead(Sender: TObject; Sock: TCustomWinSocket);
  public
    constructor Create();
    function Connect(IP: string; port: integer): bool;
    procedure Send(text: string);
end;

  constructor sockclient.Create();              // Constructor
  begin
    socket := TClientSocket.Create(nil);
    socket.active := false;
    socket.onread := ClientRead;
    
  end;

//---------------------------

  function sockclient.Connect(IP: string; port: integer) : bool;
  begin
    result := true;
    socket.host := IP;
    socket.port := port;
    if not socket.active then
    begin
      try
        socket.Active := true;
      except
        result := false;
      end;
    end
  end;

//---------------------------

  procedure sockclient.ClientRead(Sender: TObject; Sock: TCustomWinSocket);
  begin
    MessageBox(0'''guuut', MB_OK);
  end;

//---------------------------

  procedure sockclient.Send(text: string);
  begin

  end;

//---------------------------

//VARS
    var sinclient: sockclient;
    
//-------------------------------------------------------


da muss bei connect was falsch sein.... so wirds aufgerufen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
run := true;
    sinclient := sockclient.Create;
    while run do
    begin
      repeat
        Sleep(5000);
      until sinclient.Connect('127.0.0.1'1337);
    end;

aber beim empfänger kommt nichts an....

Da muss beim Connecten oder so etwas falsch sein. Beim Empfänger schauts so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm2.sinsockClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  sin.Cols[0].add(socket.RemoteAddress); //Listeneintrag
  socket.SendText('SendNames');
end;


aber weder erscheint der client beim empfänger in der liste, noch kommt die MsgBox,
die beim Client beim Empfangen von Daten kommen sollte. Am Empfänger kanns nicht liegen, andere Clienten erscheinen nämlich.

Bitte um Hilfe,
grtz Snibb
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 26.07.07 14:34 
Moin und :welcome: im Forum!

user profile iconSnibb hat folgendes geschrieben:
Programm, ohne VCL, das heisst ohne dass das mit den Events so einfach geht.

Naja, soo schwer ist das nun auch wieder nicht, eine Methode anzulegen und diese dann einem dynamisch erzeugten Objekt zuzuweisen... 8) Kuckst du ;)

Allerdings sowas hier:
user profile iconSnibb hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
run := true;
    sinclient := sockclient.Create;
    while run do
    begin
      repeat
        Sleep(5000);
      until sinclient.Connect('127.0.0.1'1337);
    end;

ist nicht ereignisorientierte Programmierweise (abgesehen davon, dass ein TClient-/TServerSocket ohne ein TApplication-Objekt sowieso nicht so ganz richtig funktioniert). :?

Wenn schon nonVCL, dann richtig: blocking-socket-calls und Threads oder gleich Indy. :mahn:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Snibb Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 26.07.07 14:40 
hab ich jetzt nich kapiert ^^
was genau muss ich jetzt machen ist das jetzt machbar oder nicht?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 26.07.07 14:47 
Moin!

user profile iconSnibb hat folgendes geschrieben:
ist das jetzt machbar oder nicht?

Machbar ist eine Menge, die Frage ist, wieviel Aufwand das ist... 8) :lol:

user profile iconSnibb hat folgendes geschrieben:
was genau muss ich jetzt machen

So wie du das ansetzt - gar nichts weiter in dieser Richtung, das wird nix. :|

:idea:
a) IdTCPServer und IdTCPClient von den Indies nehmen
b) den TClient-/TServerSocket im blocking-mode betreiben und jeweils einen Thread dafür abspalten (wenn dir das nix sagt, dann bleibt faktisch nur noch a)... :?)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Snibb Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 26.07.07 14:59 
ach ka**e dann halt her mit VCl... mist