![]() |
läd socketserver auch ohne threads mehrere sachen gleichz.?
hi!
weil der idtcpclient keine onread mehthode hat möchte ich versdcuehn auf die sockets umzusteigen. hab zwar ma was gesehn wie man mit dem umweg über thread lesen kann was der client geschikt bekommt, hat auch gefunzt leider bin ich dann bei der anpassung fehlgeschlagen:ich wollte den code(den ich hioer ausm forum hab) abändern dass ich den client auch dyn. erstellen kann und trotzdem sehe WANN er WAS gesendet bekommt. der client wird nämlich als element in einem array erstellt. falls das umschreiben für jemand hier ne leichitgkeit wär, würd mich übelst!!! freuen!! hier mal der code:
Delphi-Quellcode:
also der code ist nimmer 1:1 der der hier zu finden ist, hab execute schon verändert wie ich sie brauche, dass klappt auch..
Type
TE = Class(TTHread) private protected Procedure Execute; override; public Constructor Create; End; [...] function te.execute:string; var s:string; Begin repeat if form1.client.Connected then begin s:=form1.client.Readln(); if s<>'' then result:=s; end; until terminated; End; constructor te.create; begin inherited create(false); end; jedenfalls ist jetzt mein problem, einen client dyn. zu erstellen un ihn dann "in diesem thread" zu erstelln und vorallem muss dann ja in der execute-funktion der name vom client angepasst werden für jeden erstellten client... da hab ich leider net wirklich ne ahnnung wie ich das machen müsste/könnte.wenn da jemand ne lösung wüsst, das wär mir am allerliebsten!! so, da ich dafür ja net die lösung kenne hab ich mir überlegt wieder ;) auf die sockets "downzugraden";) nur müsst ich dann wissen, ob der serversocket von x clients gleichzeitig streams(buffer) geschickt bekommen kann(also die bandbreite dann gut ausnutzen würde) oder ob er ein stream nach dem anderen empfängt.. die sache is die, dass ich, wenn er von einem client "fertigempfangen hat" ihm SOFORT eine nachricht schicken muss (ne textnachricht).Aber während dessen musser weiter von den anderen clients empfangen.. geht das, ohne threads zu verwenden? weil die blick ich leider net so wirklich... so dann eben während ich den post hier geschreiben hab is mir die idee gekommen idtcpserver und clientsocket so kombinieren..aber bis aufs connecten klappt da leider nix(net mal ne textnachricht schicken) HOFFE ihr könnt mir helfen.. FETTES THX SCHON MAL!! tim |
Re: läd socketserver auch ohne threads mehrere sachen gleich
hi
warum kombinierst nicht einfach 2 tserver socket, dann hast mulitthreading gleich dabei... hab sowas noch nicht probiert - ist nur ne idee. Arnulf |
Re: läd socketserver auch ohne threads mehrere sachen gleich
weil ich nur einen port zur verfügung habe...
trotzdem danke! hat jemadn ne idee? |
Re: läd socketserver auch ohne threads mehrere sachen gleich
Ich denke mal du hast das problem, daß ich auch immer hab - keiner versteht was du machen willst - und es schaut auch unmöglich aus :)
Zumindestens so wie du es beschreibst. Erst mal denke ich solltest du ein paar grundesätzliche Dinge verstehen. Die hier benutzten componenten egal ob es sich um indy oder fastnet tserver/client socket handelt arbeiten ja alle nur mit dem Betriebssystem Windows. Windows liefert dier jetzt also die schnittstelle und du verwendest die nur. Jetzt hast du grundsätzlich 2 gängige protokolle die du verwenden kannst um daten zu verschicken. TCP und UDP (es gibt noch mehr aber das ist gängig für dirrekte kommunikation). TCP bedeutet eine stehende Verbindung - dh. du hast im prinzip eine Verbindung zwischen zwei Computern point to point über einen socket. Vereinfacht wäre ein socket die ip adresse und der port. Ich bin mir hier nicht sicher was du willst, aber du kannst nicht mehrere verbindungen zum gleichen socket haben - das geht mit TCP nicht wirklich - dafür wurde das protokoll nicht gemacht. Mit udp würde das wohl funktionieren weil UDP keine verbindung hält - du schickst praktisch daten ins nirvana und weißt nicht ob die ankommen oder nicht. Dafür hast aber auch keine point to point Verbindung. Grundsätzlich ist der port den du bei den tcp delphi componenten angiebst ja nur der query port also der port mit der die verbindung aufgebaut wird. Kommuniziert wird dann über einen anderen port und zwar den port den sich der server mit dem client ausmacht - bzw. gleich über mehrere wenn mehrere packete gleichzeitig verschickt werden. TCP hat die angewohnheit die Ports rauf zu zählen bei jedem packet das verschickt wird und am anderen ende in der selben reihenfolge wieder zusammen zu bauen. Die Bandbreite wird also immer voll ausgenutzt - ausser das Betriebssystem hat was dagegen oder du beschränkst das selbst. So wie ich dich verstehe willst du streams (binärdaten) und text (strings) gleichzeitig verschicken und das am client aber getrennt behandeln über die gleiche tcp verbindung. Grundsätzlich ist dem Socket oder Windows herzlich egal was du über den socket jagst - Mit TCP gibts nur die Möglichkeit ein eigenes Protokoll zu basteln und so die Binärdaten und Strings zu trennen. Mit UDP wäre es möglich von verschiedenen sendern daten über den gleichen socket zu empfangen - wenns deine firewall zulässt. Mit TCP wird das nicht wirklich gehen. Arnulf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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-2025 by Thomas Breitkreuz