| Autor |
Beitrag |
Spurius
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Do 06.11.03 14:35
Hallo
kann mir vielleicht einer den Gebrauch von tcpserver/client erklären? Weil aus der hilfe bin ich nicht so schlau geworden
Ich will damit einen Netzwerkchat proggen. Also bräuchte ich folgendes:
- wie connecte ich?
- wie empfange ich?
- grundeinstellungen etc. ...
MfG
Spurius
Zuletzt bearbeitet von Spurius am Do 06.11.03 20:35, insgesamt 1-mal bearbeitet
|
|
ShadowThief
      
Beiträge: 278
|
Verfasst: Do 06.11.03 16:02
is nicht schwer, einfach im server einen localport einstellen, z. B. 1234 und dann active auf true setzen, dann läuft der server. beim client dann remotehost (die ip oder der rechnername im netzwerk auf dem der server läuft) und remoteport (1234) einstellen und die methode connect aufrufen.
shadow.
Moderiert von Tino: Überflüssige Absätze entfernt.
_________________ "soylent grün ist menschenfleisch!"
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Do 06.11.03 16:57
Also, ich hab jetzt ein programm server und eines client.
aber was die schreiben wird nur bei denen angezeigt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCreate(Sender: TObject); begin tcpserver1.Active := true; end;
procedure TForm1.Button1Click(Sender: TObject); begin tcpserver1.Sendln('hallo client'); memo1.lines.Add('hallo'); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin tcpserver1.Active := false; tcpserver1.Free; end; |
des ist der server
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.FormCreate(Sender: TObject); begin tcpclient1.Active := true; tcpclient1.RemoteHost := ('localhost'); tcpclient1.RemotePort :=('2222'); end;
procedure TForm1.Button1Click(Sender: TObject); begin tcpclient1.Sendln('hallo server'); memo1.lines.add('hallo server'); end; |
und des der client. Die nachrichten will ich mit sendln senden. Also warum kommt da nix an?
MfG
Spurius
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
barfuesser
      
Beiträge: 324
|
Verfasst: Fr 07.11.03 10:53
Das gefällt mir! Beide quasseln und keiner hört zu. Dir fehlen die Empfangsroutinen. Sieh mal in der Onlinehilfe bei den Events nach. Da sollte eins für den Empfang dabei sein.
barfuesser
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Fr 07.11.03 15:10
Hi,
es gibt reciveln().
Aber was kommt da in die klammer?
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Fr 07.11.03 15:31
Nochmal, was kommt in den Parameter und wo muss das stehen? in einem Timer oder was?
|
|
barfuesser
      
Beiträge: 324
|
Verfasst: Fr 07.11.03 15:45
Mensch ist da jemand ungeduldig!  Versuch es mal mit nichts, also
Delphi-Quelltext
aber eigentlich steht das alles in der OH.
barfuesser
|
|
Sorryman
      
Beiträge: 52
|
Verfasst: Fr 07.11.03 15:55
Es gibt sogenannte Events oder zu Deutsch Ereignisse! Beim OnExecute ereignis des Servers zum Beispiel kannst du die Nachricht empfangen die du mit einem Client sendest...
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Fr 07.11.03 16:11
also, sorry wen ich mich etwas dumm anstelle, aber ich bin programmier noch nicht so gut.
das OnExecute ereignis, wie kann ich da benutzen? wenn ich die kompo tcpserver anklicke, steht das da nicht dabei. in der hilfe gibt es auch ein onReceive ereignis, aber wie kann ich die benutzen? die stehen nicht im objektinspector. am besten wär ein bsp. mit quellcode
MfG
Spurius
|
|
barfuesser
      
Beiträge: 324
|
Verfasst: Fr 07.11.03 16:15
Für den Anfang ist es wohl das einfachste, wenn Du das OnConnect-Ereignis nimmst und mit receiveln solange vom Socket liest, wie Du Daten erhältst. Mit einem receiveln erhältst Du genau die Daten, die Du mit einem sendln abgeschickt hast.
[edit]Und vergiß nicht die Nutzung von WaitForData![/edit]
barfuesser
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Fr 07.11.03 16:27
Hi,
@barfuesser
danke für deine Antworten, aber ich krieg des net hin. in den demos wird das über threads gelöst, aber das ist ja noch komplizierter. Könntest du mir vielleicht ein Bsp.programm schicken? Dann bestände vielleicht die chance, dass ich des irgendwie checke
wäre echt sehr nett von dir!
MfG
Inselveteran
mrmustermann@gmx.de
|
|
barfuesser
      
Beiträge: 324
|
Verfasst: Fr 07.11.03 16:34
Ich kann mal nachher zu Hause gucken, ob ich noch irgendwo ein altes Programm habe. Mit diesen Kompos habe ich nämlich schon seit Jahren nichts mehr gemacht. Aber da Du D7 hast, solltest Du Dir vielleicht mal die Indy-Komponenten ansehen ( TIDTCPSERVER und TIDTCPCLIENT).
barfuesser
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Fr 07.11.03 18:51
Hallo,
die Indy-Kompos scheinen ja die modernere Lösung zu sein. Könntest du mir da ein Bsp. schreiben. einen einfachen chat ohne extras, nur damit ich mal das prinzip verstehe
Wenn ja, schicks bitte an meine mail
Oder poste den code hier
MfG
Inselveteran
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Sa 08.11.03 14:11
Bei den Indy TCPClient und TCPServer Kompos wirst du net um threads rumkommen (beim server schon, beim client net!)... also guck dir mal das hier an: www.pergolesi.demon....rog/threads/ToC.html Das is n super thread-tut
es is so:
der client connected zum server
-> beim server wird onConnect ausgeführt
-> der client schickt irgendwas
-> beim server wird OnExecute ausgelöst. Hier kannst du nu n(ohne threads) die Message bearbeiten, was du halt mit ihr tun möchtest
-> ...
wenn der server aber ws an den client schicken will, dann muss bei client ein Threrad laufen, der ständig überprüft, ob der Server was geschickt hat, da es beim Client kein entsprechendes Ereignis (irgendwas mit OnServerWrite oder so) gibt. Also musst du das mit Threads machen... is sowieso besser
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Sa 08.11.03 16:05
Hi,
wie connected der client? was kommt in den parameter rein?
was muss alles beim server stehen ausser server.active?
@MrSaint
das mit den Threads scheint ja ein bisschen kompliziert zu sein
MfG
Spurius
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Sa 08.11.03 16:09
Connect des Clients:
Quelltext 1: 2: 3:
| IdTCPClient1.Host:='[IP des Servers]'; IdTCPClient1.Port:=[Port des Servers]; IdTCPClient1.Connect; |
beim server muss nix außer IdTCPServer1.Active stehen. Die engegenagenen Nachrichten kannst du dann im OnExecute Ereignis lesen (k.A. wie du das machst... evtl. per IdTCPServer1.ReadLn; )
Das mit den Thread shat mich auch lange Zeit abgeschreckt, is aber wirklich ne tolle sache
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Sa 08.11.03 16:33
Hallo, danke für die schnelle hilfe, aber es klappt immer noch nicht. ich habe server auf active, und defaultport festgelegt.
beim client hab ich client.host auf localhost, port gleich wie server und client.connect.
und dann kommt die meldung host nocht gefunden. error 11001
wenn ich als host 127.0.0.1 angebe kommt auch error 11001
kannst du mir vielleicht ein ganz simples bsp. prog hier posten oder per email schicken?
MfG
Spurius
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Sa 08.11.03 16:35
guck dir die Indy Demo an... aber so wie du das gerade beschreibst, müsste das eigentlich funzen
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Sa 08.11.03 18:22
Hallo, also ich hab mir auch nochmal die indy-demos angeschaut, aber des geht einfach net.
@MrSaint könntest du mit vielleicht dich ein ganz simples programm schicken oder hier posten. ein bsp. für den server und eines für den client.
Das wäre echt sehr nett!
Weil ich hätt gern mal ein erfolgserlebnis und dass ich seh, dass es doch irgendwie geht.
Also ich würd mich freuen!
MfG
Spurius
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Sa 08.11.03 18:30
Es geht!!!!!!!!!!!!!!!!!!!!!!!!!!!
ich hab port und host im objectinspector und nicht im editor eingestellt und jetzt geht es!!!!
MfG
Spurius
|
|