AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi "Rückkanal" Bei Client/Server Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

"Rückkanal" Bei Client/Server Anwendung

Ein Thema von Aljoscha · begonnen am 6. Mär 2005 · letzter Beitrag vom 6. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#1

"Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 14:05
Hi.
Ich hab hier eine vielleicht etwas dumme Frage, aber ich komme nicht weiter.
Ich habe ein kleines Chatprogramm.
Das ganze sieht so aus das es einen Client und einen Server gibt.
Nun kann ich mit dem Client an den Server senden, aber geht das ganze auch umgekehrt?
Das der Server an den Client schreibt?
Oder muss ich in jedes der programme einen Client und einen Server eibauen?
Wäre nett wenn jemand ein Codebeispiel hätte.
Und wo ich grad dabei bin ^^.
Gibt es bei der Standart Server/ Client Komponente auch Threats und wie kann ich damit umgehen?
Auch hier wäre ein beispielcode nützlich.

Ich hoffe ihr könnt mir helfen. =D
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 14:16
hi,

verrate uns doch bitte, welche komponente du benutzt
die indys, sockets oder was?

Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
RJelinek

Registriert seit: 6. Mär 2005
4 Beiträge
 
#3

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 15:01
Lösung bei Verwendung von Indy:

1.) Vorausgesetzt, du verwendest TCP
Auf einer Seite die IdTCPServer-Komponente, auf der anderen brauchst du eine IdTCPClient-Komponente. Nach dem Verbindungsaufbau des Clients zum Server mit Connect bekommst du über das OnConnect-Event eine IdPeerThread (die ich jetzt mal IPT nenne). Mit dieser hast du die Möglichkeit zu Senden und zu Empfangen über die Routinen IPT.Connection.Readxxx und IPT.Connection.Writexxx. Auf der Clientseite hast du per Default Readxxx und Writexxx-Routinen über die IdTCPClient-Komponente. Da eine TCP-Verbindung bidirektional funktioniert (du kannst also auf beiden Seiten sowohl Senden als auch Empfangen), ist deine Aufgabe recht leicht gemacht ...

2.) Vorausgesetzt, du verwendest UDP
Auf beiden Seiten die IdUDPServer-Komponente verwenden. Die IdUDPServer-Komponente hat ein OnRead-Ereignis und Senderoutinen. Du brauchst also keine Threads (außer das Senden funktioniert bei dir auch Thread-gestützt.)

Lösung zu Threads:
1.) Bei UDP:
Die Komponenten bieten keine Threads, aber da du Callbacks über die OnRead-Ereignisse hast, brauchst du die bei halbwegs eleganter Programmierung auch nicht.

2.) Bei TCP:
Bis jetzt habe ich auf beiden Seiten einen normalen Thread gestartet, der sowohl Senden, als auch Empfangen übernimmt. Beim Empfangen musst du allerdings allerdings unterscheiden, ob du blockierend (also warten bis Zeichen da sind) oder nicht-blockierend arbeiten willst. Beim nicht-blockierenden Verhalten rufst du zuerst XX.ReadFromStack(true,0,false) auf und danach steht in XX.InputBuffer.Size die Anzahl an empfangen Zeichen zur Verfügung (wenn da 0 drinnsteht, dann keine Read-Routine aufrufen, da du sonst blockierst).

Bei der IdTCP-Serverkomponente glaube ich gäbe es die Möglichkeit den IdPeerThread zu verwenden. Dieser ruft das OnExecute-Ereigbnis der Serverkomponente auf, die als Thread beim Server verwendet werden könnte.

Wenn du aber auf beiden Seiten einen Thread brauchst, dann empfiehlt es sich, diesen nicht zu verwenden, da du ansonsten zwei unterschiedliche Quellcodes für Sender und Empfänger hast. Meine manuell angelegten Threads kann ich aber auch beiden Seiten mit identischem Quellcode verwenden.
  Mit Zitat antworten Zitat
Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#4

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 15:15
Ich verwende die "normale" ClientSocket / ServerSocket Komponente die bei Delphi 5 dabei war, unter dem Menüpunkt Internet

Hoffe ihr könnt damit was anfangen.
  Mit Zitat antworten Zitat
Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#5

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 16:08
Also vielleicht ist nicht ganz klar was ich meine.

Ich sende per:
ClientSocket1.Socket.SendText('Testsring-Client')

Das klappt wunderbar.

Nun will ich umgekehrt etwas an den Client vom Server aus senden:
ServerSocket1.Socket.SendText('Testsring-Server')

Dann erscheint eine Fehlermeldung:

In Server.exe ist eine Exeption der klasse ESocketError aufgetreten.
Meldung: 'Windows-Socket-Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (...) keine Adresse angegeben wurde (10057)

Weiß jemand weiter?
  Mit Zitat antworten Zitat
Cras339

Registriert seit: 6. Mär 2005
Ort: Celle
16 Beiträge
 
#6

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 16:43
Hallo!

Du brauchst auf beiden Formularen auch beide Komponenten (TServerSocket und TClientSocket)! Dann kannst du auch Nachrichten zurücksenden!

Ich meine so müsste es funktionieren hab es mal an Hand eines Beispielchats für C++ gesehen.

Gruß

Tim
Geht nicht gibt es doch!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 16:51
@Cras339: Stimmt nicht was du schreibst.
mit
ServerSocket1.Socket.Connections[i] kommt man an die Verbindungen zu den einzelnen Clients. Wenn also
ServerSocket1.Socket.ActiveConnections größer 0 ist kann man mit
ServerSocket1.Socket.Connections[i].SendText auch Text zurück an den Client senden. Wenn nur ein Client verbunden ist kann man also mit
ServerSocket1.Socket.Connections[0].SendText('Hallo'); den Text "Hallo" an den Client schicken.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Cras339

Registriert seit: 6. Mär 2005
Ort: Celle
16 Beiträge
 
#8

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 17:05
Ich habe gerad noch mal ein Beispiel für einen Chat, das bei meiner Delphi-Version dabei war gefunden. Da ist es auch mit beiden Komponenten gelöst worden!

Ich würde es auch anhängen aber das ist rechtlich bestimmt nicht gestattet!
Geht nicht gibt es doch!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 17:08
es verbietet ja auch keiner mit beiden Komponenten zu lösen, aber es ist eben überflüssig da die Verbindunge zwischen Server und Client schon besteht, wozu dann noch eine zweite verbindung herstellen wenn man auch über die bestehende Verbindunge in beiden Richtungen Senden/empfangen kann?!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#10

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 17:54
Wenn du Daten vom Server an Clienten schicken willst, guck ma in die Suche und du wirst fündig.
Zum Beispiel hier:
Klick
Klick I
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz