Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TcpServer ----> TcpClient senden und empfangen (https://www.delphipraxis.net/82849-tcpserver-tcpclient-senden-und-empfangen.html)

jokerfacehro 20. Dez 2006 17:07


TcpServer ----> TcpClient senden und empfangen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mich seit 2 Tagen mit der Suche von hilfreichen Seitenbeschäftigt und so einiges gefunden.
Darauf hin habe ich es mit WinSocket, TcpClient/TcpServer und IdTcpClient/IdTcpClient probiert.
Ich habe mit TcpClient/Server geschafft, per bmBlocking Daten vom Client an den Server zu senden.
Das Ganze soll ein kleiner Chat werden ;)

per
Delphi-Quellcode:
SendLn('hallo');
vom Client
und das ganze mit
dem
Delphi-Quellcode:
OnAccept
auf dem Server abgefangen

alles wunderbar.

will ich jetzt vom Server zum Client senden klappt das nicht.
ich habe mir schon einiges mit mbNonBlocking angeguckt und auch selbst ausprobiert,
doch wenn ich den Client auf NonBlocking stelle empfängt mein server nicht richtig,
ab und zu klappt es, doch meistens kommt garnichts an und ich kriege auch einen socket error.
ich teste das ganze per localhost, sollte ja kein problem sein.


hmmm ich komm nicht drauf...

vielleicht hat jemand eine idee? ;)

hier mein proggi im anhang

Edit: neue version ist weiter unten

jokerfacehro 20. Dez 2006 17:44

Re: TcpServer ----> TcpClient senden und empfangen
 
ich habe einen forumeintrag über client threads gefunden, das ist allerdings für NonBlocking ;/
http://delphi.newswhat.com/geoxml/fo...s.t-online.com

http://delphi.newswhat.com/geoxml/fo...ps.borland.com

jokerfacehro 21. Dez 2006 07:09

Re: TcpServer ----> TcpClient senden und empfangen
 
ich komm einfach nicht weiter
Kann bitte jemand helfen :mrgreen:

Aenogym 21. Dez 2006 07:17

Re: TcpServer ----> TcpClient senden und empfangen
 
moin,

also ich persönlich kann dir dieses tutorial empfehlen :) es setzt auf die TServerSocket und TClientSocket-Komponenten auf. Da kann mans chon einiges lernen. danach kannst du dich ja mit indy beschäftigen, was weitaus mächtiger ist :)

grüße (nach rostock?^^)
aeno

jokerfacehro 21. Dez 2006 07:26

Re: TcpServer ----> TcpClient senden und empfangen
 
Hey !
danke für den tipp ;)
das winsocket tutorial hab ich mir gestern angesehen und gleichzeitig ein zweites,
ich habe mir einfach das tutorial als testprogramm zusammengestellt und geschaut ob das hinhaut.

und da kamen gleich schöne synchronisations fehler und weiteres obwohl ich den quelltext nur kopiert hatte. da hab ich es denn gleich sein gelassen.

ich habe mit den TTcpClient ---->TTcpServer schon eine verbindung hingekriegt klappt wunderbar
auf, den Client habe ich auf mb Blocking und den Server auf mbThreadBlocking.

ich finde bloß keine lösung für den umgekehrten weg, ich habe es schon mit einem timer im client versucht, einfach abzufragen ob was kommt, ich habe aber immer nur leere zeilen bekommen obwohl der server periodisch an den client was sendet.

es wäre schön das mit TTcpClient + TTcpServer hinzubekommen, da ich damit am weitesten gekommen bin :D

Schöne Grüße nach Schwerin vom Blumenhund :mrgreen:

jokerfacehro 21. Dez 2006 07:32

Re: TcpServer ----> TcpClient senden und empfangen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier die neuste version meines tcp proggis

Aenogym 21. Dez 2006 07:35

Re: TcpServer ----> TcpClient senden und empfangen
 
also durch das OnAccept bekommst du ja den client als TCustomIpClient übergeben. den kannst du dir für spätere zwecke beispielsweise in einem array ablegen.
wenn du nun was vom server zum client senden willst, musst du lediglich TCustomIpClient.SendLn() aufrufen. am client wird dann OnReceive ausgelöst, welches dir mittels Buf und DataLen die Nachricht übergibt :)

im grunde ganz simpel. klappt bei mir tadellos.

edit: bei deinem server möchtest du schon im OnAccept den etxt empfangen. funktioniert bastimmt auch. aber besser ist es, auf das OnReceive des TCustomIpClient zu reagieren. denn da musst du nicht mit Receiveln() rumhantieren, sondern bekommst den text schon als pchar. und zwar jedesmal, wenn der client etwas gesendet hat.
und im client brauchst du beim empfang auch nciht ReceiveBuf() nutzen. da kommt dann nämlich etwas leeres raus. deine nachricht steht bei dem ereignis bereits im parameter buf. receivebuf() würde sich die nächste nachricht holen (die aber noch gar nciht geshcickt wurde -> also leer ;))

aeno

jokerfacehro 21. Dez 2006 07:47

Re: TcpServer ----> TcpClient senden und empfangen
 
:D :D :D

ich hab die ganze zeit per
Delphi-Quellcode:
TcpServer1.SendLn('string');
versucht was zu schick grrr ^^

jetz mit

Delphi-Quellcode:
ClientSocket.SendLn('string');
hab ich es vorhin ma ganz kurz geschafft das OnrecieveEvent auszulösen.
Aber der Text kam nicht an ^^
ich werde weiter rumprobieren und jetzt noch eine Frage
kann ich dem ClientSocket per Sendln etwas schicken wenn er gerade nicht connected hat ?
oder geht das denn immer nur im OnAccept Event?

jokerfacehro 21. Dez 2006 07:50

Re: TcpServer ----> TcpClient senden und empfangen
 
du meintest ja noch lieber auf Clientsocket.OnReceive reagieren als of OnAccept des Servers wie krieg ich das hin ? ^^

Aenogym 21. Dez 2006 07:55

Re: TcpServer ----> TcpClient senden und empfangen
 
Zitat:

Zitat von jokerfacehro
du meintest ja noch lieber auf Clientsocket.OnReceive reagieren als of OnAccept des Servers wie krieg ich das hin ? ^^

schreib dir zuerst eine funktion, die als eventhandler dient:

Delphi-Quellcode:
procedure TForm1.MyReceive(Sender: TObject; Buf: PChar;
  var DataLen: Integer);
begin
  //hier die nachricht ausesen (steck im parameter "Buf"; die länge steht in "DataLen")
end;
dann, beim OnAccept des TcpServer folgendes:

Delphi-Quellcode:
procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
begin
  //...
  ClientSocket.OnReceive := MyReceive;
  //...
end;
damit wird MyReceive aufgerufen, wenn bei dem server eine nachricht des clients ankommt ;)

aeno


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Seite 1 von 4  1 23     Letzte »    

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