Autor Beitrag
Spurius
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 142

Win XP Home
D3 Prof, D7 Prof
BeitragVerfasst: Do 13.11.03 14:03 
Hallo,

ich will mit einem Client eine Message von einem Server empfangen.
wenn ich das mit folgendem code mach, ist das programm voll ausgelastet und man kann nichts mehr anklicken.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Timer2Timer(Sender: TObject);
var post:string;
begin
 if (client.connected = false) then exit;
 if (client.connected = true) then begin
 client.ReadLn(post);  end;
end;

(das intervall ist 500) wie kann ich das so lösen, dass ich noch eingaben machen kann?

MfG
Spurius

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


Zuletzt bearbeitet von Spurius am Do 13.11.03 17:20, insgesamt 1-mal bearbeitet
Spurius Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 142

Win XP Home
D3 Prof, D7 Prof
BeitragVerfasst: Do 13.11.03 14:15 
wenn ich das ganze ins onexecute-ereignis setzte, passiert das gleiche.
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Do 13.11.03 18:40 
Ich habe den Eindruck, daß Du Dir erst einmal den Unterschied zwischen einem Client und einem Server verinnerlichen solltest. Der Server wartet auf eingehende Verbindungen, d.h. der Client verbindet sich zum Server, dann stellt er seine Anfrage (WriteLn) und wartet dann auf die Antwort (ReadLn) des Servers. Damit der Client nicht ewig wartet, falls der Server hängt, kann man dem ReadLn ein TimeOut mitgeben. Demzufolge sollte eine ganz einfache ClientAnwendung folgendermaßen aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Client.Connect;
Client.WriteLn(Anfrage);
Antwort := Client.ReadLn;
Client.Disconnect;

barfuesser
Spurius Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 142

Win XP Home
D3 Prof, D7 Prof
BeitragVerfasst: Do 13.11.03 18:57 
und was steht in der anfrage?
hier ist mein quellcode:
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:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
procedure TForm1.connectClick(Sender: TObject);
begin
 client.Port := strtoint(port.Text);
 client.Host := ip.Text; 
 client.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

 client.Writeln(edit2.Text + ': ' + edit1.text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 memo1.Lines[0] := 'Chatprotokoll';
 memo2.lines[0] := 'Chatprotokoll';
 memo3.Lines[0] := 'Angemeldete Chatter';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var enab1,enab2:integer;
begin

 if port.text <> '' then enab1 := 1 else enab1 := 0;
 if ip.Text <> '' then enab2 := 1 else enab2 := 0;
 if (enab1 + enab2) = 2 then connect.Enabled := true else
  connect.Enabled := false;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 server.DefaultPort := strtoint(serverport.Text);
 server.active := true;


end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 server.Active := false;
end;

procedure TForm1.serverConnect(AThread: TIdPeerThread);
begin
 memo3.Lines.Add(athread.Connection.Socket.Binding.PeerIP)

end;

procedure TForm1.serverExecute(AThread: TIdPeerThread);
var post: string;
begin
  post := athread.connection.readln;
  memo2.Lines.Add(post);
  athread.Connection.WriteLn(post);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  server.Bindings.Free;
 client.Disconnect;
 server.Free;
 client.Free;
 server.destroy;
 client.Destroy;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var post:string;
begin


end;

end.

ich schick da einfach nen string an den server und der server soll den zurückschicken. und was muss ich da ändern?

MfG
Spurius

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