Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:34

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



delete[] Frage

Discussion on delete[] Frage within the C/C++ forum part of the Coders Den category.

Reply
 
Old 03/26/2012, 15:27   #16
 
elite*gold: 0
Join Date: Jul 2010
Posts: 40
Received Thanks: 1
also WSAGetLastError(); gibt immer 0 zurück.
und wieso soll recv 0 zurückgeben? recv gibt die anzahl der empfangenen bytes zurück.
bei null würde er also GAR NIX empfangen. bei mir empfängt er immer hin etwas (wenn auch nicht alles )
kleinernascher4 is offline  
Old 03/26/2012, 15:45   #17
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Dann liegt es vielleicht daran, dass, wie MrSm!th schon sagte, nichtz alles auf einmal kommt.
jacky919 is offline  
Old 03/26/2012, 15:49   #18
 
elite*gold: 0
Join Date: Jul 2010
Posts: 40
Received Thanks: 1
nu, und wie stelle ich dann sicher dass ich alles empfange?
kleinernascher4 is offline  
Old 03/26/2012, 15:56   #19
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Am besten übermittelst du zuerst die Größe der Datei. Dann kannst du mit der empfangenen Größe einen Puffer allozieren. Nun fängst du an zu empfangen.
Code:
char* buf = new char[size];
int received = 0;
while(recieved < size)
{ 
received += recv(s, buf+received, size - received, 0);
}
delete[] buf;
jacky919 is offline  
Old 03/26/2012, 18:38   #20
 
elite*gold: 0
Join Date: Jul 2010
Posts: 40
Received Thanks: 1
ok, thx jetzt gehts!
kleinernascher4 is offline  
Old 03/26/2012, 18:39   #21


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by kleinernascher4 View Post
also WSAGetLastError(); gibt immer 0 zurück.
und wieso soll recv 0 zurückgeben? recv gibt die anzahl der empfangenen bytes zurück.
bei null würde er also GAR NIX empfangen. bei mir empfängt er immer hin etwas (wenn auch nicht alles )
genau, und wenn es 0 zurückgibt, wurde nichts mehr empfangen

Quote:
Originally Posted by kleinernascher4 View Post
nu, und wie stelle ich dann sicher dass ich alles empfange?
genau so. du rufst recv so lange auf, bis es 0 zurückgibt, dann hast du nichts empfangen und der sendevorgang ist vorbei.
MrSm!th is offline  
Old 03/26/2012, 18:52   #22
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Oder du empfängst solange, bis die dir übermittelte Dateigröße erreicht wurde (siehe mein Beispiel).
jacky919 is offline  
Old 03/26/2012, 19:25   #23
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
Oder du empfängst solange, bis die dir übermittelte Dateigröße erreicht wurde (siehe mein Beispiel).
Setzt voraus, dass man weiß wie groß die Datei ist, was meistens leider nicht der Fall ist.
xNopex is offline  
Old 03/26/2012, 19:28   #24
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Quote:
Originally Posted by xNopex View Post
Setzt voraus, dass man weiß wie groß die Datei ist, was meistens leider nicht der Fall ist.
Stimmt natürlich, aber wenn man sie nicht wissen sollte, hat man ohnehin Probleme mit der Puffergröße.
jacky919 is offline  
Old 03/26/2012, 19:31   #25
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Nicht unbedingt. recv() empfängt afaik nie mehr als die angegebene Anzahl Bytes (s. dritter Parameter). Man kann sich dann einen einfachen dynamischen Puffer basteln. Muss halt bisschen Kopieraufwand betrieben werden ;O
xNopex is offline  
Old 03/26/2012, 19:34   #26
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Nicht empfangene Bytes können also später noch empfangen werden?
(Bin nicht so bewandert im Umgang mit TCP )
jacky919 is offline  
Old 03/26/2012, 19:38   #27
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Jaja das geht. Man muss Recv halt solange aufrufen, bis es 0 returned, wie bereits schon erwähnt wurde.
xNopex is offline  
Thanks
1 User
Old 03/27/2012, 01:01   #28


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Ja, siehe:
Quote:
Originally Posted by MrSm!th View Post
genau, und wenn es 0 zurückgibt, wurde nichts mehr empfangen



genau so. du rufst recv so lange auf, bis es 0 zurückgibt, dann hast du nichts empfangen und der sendevorgang ist vorbei.
Genau daher rührt das ja. recv gibt solange etwas zurück, solange noch Daten im Netzwerkstream liegen.

Anders wäre Netzwerkkommunikation gar nicht möglich. Dateigrößen zu übermitteln wäre ja nicht das Problem, nur generell erstmal zu wissen, wie groß ein Packet wäre.
So ziemlich jedes Spiel hat verschiedene Packetstrukturen für verschiedene Zwecke, die auch unterschiedlich groß sind.
Der 3. Parameter spezifiziert nur die maximale Größe, aber wie viel davon tatsächlich genutzt wird, kannst du zum Zeitpunkt des Empfangens ja noch gar nicht wissen; erst, wenn du es empfangen hast und es parst, erfährst du anhand der eigenen Spezifikationen und Festlegungen, wie groß nun der Inhalt dieses Packettyps sein kann.
Da muss man genau so vorgehen: Man läuft in einer Schleife durch recv, bis nichts mehr empfangen wird.

recv ist ein blocking Call; wenn die Daten gerade noch auf dem Weg sind bzw. der Stream leer ist, bleibst du hängen, bis weitere Daten ankommen. Nur, wenn das Senden wirklich beendet ist, also mit keinen Daten mehr zu rechnen ist, der send Call beendet ist, dann wird 0 zurückgegeben.
Also wirst du recv nie mit 0 verlassen, außer der Sendevorgang ist beendet oder die Verbindung wurde unterbrochen.

Dementsprechend kannst du natürlich auch keine Daten "verlieren", wenn du gerade an einer anderen Stelle der Schleife bist, während Daten ankommen. Die warten dann im Stream auf die Abfrage per recv.
MrSm!th is offline  
Old 03/27/2012, 11:58   #29
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Quote:
Originally Posted by xNopex View Post
Jaja das geht. Man muss Recv halt solange aufrufen, bis es 0 returned, wie bereits schon erwähnt wurde.
Nein, recv gibt die Anzahl der empfangenen Bytes zurück. Gibt es es 0 zurück, dann hat der Client die Verbindung unterbrochen.


Siehe:
Nightblizard is offline  
Thanks
1 User
Old 03/27/2012, 12:08   #30
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Ja da hast du zweifelsfrei Recht. Hab da scheinbar iwas durcheinander geworfen. Also man muss recv nicht aufrufen, bis es 0 returned, aber man kann es sicherlich tun. Zusammengehörige Daten muss man dann natürlich anders erkennen. Ich vermute das wird dann über das verwendete Protokoll erledigt.. Bin aber jetzt auch etwas verunsichert.
xNopex is offline  
Reply


Similar Threads Similar Threads
HELP!!! CAN'T DELETE F-NET!!!
04/23/2011 - CrossFire - 5 Replies
Ok so this hack was detected couple day ago and I was using an injector call Black Dragon and so when I didn't open it or anything just starting crossfire normally. There is alway a pop up for f-net and sometime I got ban even though I didn't activated. So anyone know a way to help me solve this problem... (lose about 6-10 account)



All times are GMT +1. The time now is 10:34.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.