![]() |
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:
vom Client
SendLn('hallo');
und das ganze mit dem
Delphi-Quellcode:
auf dem Server abgefangen
OnAccept
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 |
Re: TcpServer ----> TcpClient senden und empfangen
ich habe einen forumeintrag über client threads gefunden, das ist allerdings für NonBlocking ;/
![]() ![]() |
Re: TcpServer ----> TcpClient senden und empfangen
ich komm einfach nicht weiter
Kann bitte jemand helfen :mrgreen: |
Re: TcpServer ----> TcpClient senden und empfangen
moin,
also ich persönlich kann dir ![]() grüße (nach rostock?^^) aeno |
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: |
Re: TcpServer ----> TcpClient senden und empfangen
Liste der Anhänge anzeigen (Anzahl: 1)
hier die neuste version meines tcp proggis
|
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 |
Re: TcpServer ----> TcpClient senden und empfangen
:D :D :D
ich hab die ganze zeit per
Delphi-Quellcode:
versucht was zu schick grrr ^^
TcpServer1.SendLn('string');
jetz mit
Delphi-Quellcode:
hab ich es vorhin ma ganz kurz geschafft das OnrecieveEvent auszulösen.
ClientSocket.SendLn('string');
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? |
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 ? ^^
|
Re: TcpServer ----> TcpClient senden und empfangen
Zitat:
Delphi-Quellcode:
dann, beim OnAccept des TcpServer folgendes:
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;
Delphi-Quellcode:
damit wird MyReceive aufgerufen, wenn bei dem server eine nachricht des clients ankommt ;)
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient); begin //... ClientSocket.OnReceive := MyReceive; //... end; aeno |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz