Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 01:15

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

Advertisement



Winsockets Crash?

Discussion on Winsockets Crash? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Winsockets Crash?

Hey,
Wollte mich seit langem nun auch mal an Sockets ransetzen, ich schaffe eine Verbindung aber es Crasht oft und zeigt mir bei recv(); nur Zahlen an und nicht die Buchstaben die gesendet werden Habe das nötigste im Code belassen damit ich nicht soviel durcheinander im Code habe, aber sobald ich dann ein cout , cin ode ähnlichs im Code nutzen möchte Crasht es sofort.. mit printf(); geht es zeigt aber falsche Daten an.. Jemand eine Idee?
Code:
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
int startWinsock(void);
using namespace std;
int main(){
long rc;
SOCKET connectedSocket;
SOCKET acceptSocket;
SOCKADDR_IN addr;
char buf[256];

// Winsock starten
rc=startWinsock();
// Socket erstellen
acceptSocket=socket(AF_INET,SOCK_STREAM,0);
//Socket an Port binden und eigenschaften setzen
memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(6667);
addr.sin_addr.s_addr=ADDR_ANY;
rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
//Auf Verbindung warten..
rc=listen(acceptSocket,10);
//Akzeptieren..
connectedSocket=accept(acceptSocket,NULL,NULL);
printf("Client verbunden..\r\n");
//Daten empfangen..
strcpy(buf,"Hallo!\0");
rc=send(connectedSocket,buf,6,0);
while(true){
rc = recv(connectedSocket,buf,256,0);
buf[rc] = '\0';
cout << rc << " Bytes received: " << buf << endl;
//Verbindung getrennt?
if(rc==0){
printf("Vebindung getrennt!");
return 0;
}
}
}
Wäre demjenigen sehr Dankbar der mir helfen kann..

lg cy
Cyb0r is offline  
Old 05/05/2012, 13:04   #2
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Haste fein zusammenkopiert, l2c.
MoepMeep is offline  
Thanks
1 User
Old 05/05/2012, 13:14   #3
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
rc = recv(connectedSocket,buf,256,0);
buf[rc] = '\0';
Dein Puffer ist nur 256 Characters groß. Setze hier 255, sonst hast du bei buf[rc] evtl nen Pufferüberlauf.

Quote:
cout << rc << " Bytes received: " << buf << endl;
so geht das nicht.. versuch es mit cout.write.. Und lern die Sprache.
xNopex is offline  
Old 05/05/2012, 13:15   #4
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
@MoepMoep Wie gesagt bin ich gerade dabei das zu lernen, da möchte ich erstmal rausfinden was es an den ganzen codeteilen brauch damit ich dann selbst was daraus programmieren kann, mir gehts vorerst erstmal darum "es zu schaffen überhaupt ein funktionierenden code zu bekommen" - ohne die ganzen fehler-kontrollen mit den if´s etc. - und wenn es dabei schon crasht werde ich erstrecht nicht selbst coden anfangen wenn ich mich noch nicht mit winsockets auskenne, da wird dann nur müll dabei herrauskommen. Es ist nicht umsonst ein Tutorial wo es darum geht zu lernen woher ich den Code teilweise habe MoepMoep. Wenn ich aber den Fehler für den Crash finde, hilft mir es auch nichts jetzt anzufangen mühsam selbst das ganze zu coden, wenn am Ende doch wieder der selbe Fehler kommen wird. Wenn du also nichts zu meiner Frage beizutragen hast, lass es bitte ganz okay?Danke

lg

Quote:
Originally Posted by xNopex View Post
Dein Puffer ist nur 256 Characters groß. Setze hier 255, sonst hast du bei buf[rc] evtl nen Pufferüberlauf.



so geht das nicht.. versuch es mit cout.write.. Und lern die Sprache.
so geht das sehr wohl^^ -> using namespace std; vor dem int main() setzen dann kann man ganz normal mit cout<<"mein text"; sein text ausgeben lassen. Information..Ich arbeite NICHT mit .Net C++ sondern ganz normalem (Devc++) Jedenfalls danke für den Tipp, werde es versuchen - wenn es klappt werde ich berichten
Und zu "und lern die Sprache" - Ich kann die Sprache schon sehr gut wie ich finde, habe mich bisher nur nie wirklich mit Sockets beschäftigt, weil ich die imme so sehr verabscheut hatte wegen den ganzen Bugs die imme auftratten , da bin ich immer Verzweifelt und habs sein gelassen und Offline Programme programmiert..

EDIT: Habe es nun getan wie du sagtest, klappt leider nicht - Es crasht sobald der Client etwas sendet.. Ob dies nun Nettalk(möchte ne art mini irc-server machen), Telnet oder sonstiges ist.
Ich frage mich allerdings wieso es Crasht wenn ich cout, cin oder sonstiges wie cin.get(); verwende.. Als ob es allergisch auf C++ Funktionen wäre, printf() funktioniert wunderbar, nehme ich jedoch z.b cout crasht es erbitterlich.. komische Sache.

Grüße,
Cy
Cyb0r is offline  
Old 05/05/2012, 13:17   #5
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by Cyb0r View Post
@MoepMoep Wie gesagt bin ich gerade dabei das zu lernen, da möchte ich erstmal rausfinden was es an den ganzen codeteilen brauch damit ich dann selbst was daraus programmieren kann, mir gehts vorerst erstmal darum "es zu schaffen überhaupt ein funktionierenden code zu bekommen" - ohne die ganzen fehler-kontrollen mit den if´s etc. - und wenn es dabei schon crasht werde ich erstrecht nicht selbst coden anfangen wenn ich mich noch nicht mit winsockets auskenne, da wird dann nur müll dabei herrauskommen. Es ist nicht umsonst ein Tutorial wo es darum geht zu lernen woher ich den Code teilweise habe MoepMoep. Wenn ich aber den Fehler für den Crash finde, hilft mir es auch nichts jetzt anzufangen mühsam selbst das ganze zu coden, wenn am Ende doch wieder der selbe Fehler kommen wird. Wenn du also nichts zu meiner Frage beizutragen hast, lass es bitte ganz okay?Danke

lg

1. so einen blocktext ohne absätze liest sich kein mensch durch.
2. erst die sprache lernen, dann sich mit etwas "kompliziertem" wie sockets befassen
3. dann sind auch diese unnötigen fragen "kann mir bitte jemand sagen, was an dem copy paste code falsch ist?!?!?" nicht mehr nötig.

kthxbye

EDIT:

schmeiß dein DEVC++ ausm fenster und hol dir visual C++ Express von microschrott.
Dr. Coxxy is offline  
Old 05/05/2012, 13:19   #6
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
so geht das sehr wohl^^ -> using namespace std; vor dem int main() setzen dann kann man ganz normal mit cout<<"mein text"; sein text ausgeben lassen. Information..Ich arbeite NICHT mit .Net C++ sondern ganz normalem (Devc++) Jedenfalls danke für den Tipp, werde es versuchen - wenn es klappt werde ich berichten
Du hast da aber ein char-Array... Was du da ausgeben wirst ist vllt. die Adresse des Arrays, wenn alles gut läuft. Jedenfalls nicht den Text. Aber danke fürs Belehren.

EDIT: iwie gehts doch. Habs anders in Erinnerung.. Versuchs trotzdem mal mit cout.write..
xNopex is offline  
Old 05/05/2012, 13:23   #7
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
devc++ ist veraltet, compiler kann man evtl. updaten, aber selbst die ide ist nicht zu empfehlen.

jedenfalls hat xNopex den fehler schon genannt, buffer overflow.

der buffer hat 255 byte, wenn du aber an byte 256 schreiben willst, könnte es u.U. sein dass du in diesem bereich keine schreibrechte hast, da er evtl. schon im code bereich liegt. damit kommt es dann zu einer AV und du bekommst dieses typische 'programm funktioniert nicht mehr' fenster

@xNopex: std::cout << buf << std::endl; würde sehr wohl funktionieren!
nur wird ein nullterminierter string erwartet, wenn keine 0 zu finden ist, kann es da evtl. auch zu einer AV kommen, muss es aber nicht!

edit: wow, war ich so langsam, dass direkt 2 posts zwischen sind?

edit2: was das empfangen der daten angeht, arbeite ich gerne mit ioctlsocket und FIONREAD um direkt zu wissen, wie gross der buffer sein muss!
Tyrar is offline  
Old 05/05/2012, 13:27   #8
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
nur wird ein nullterminierter string erwartet, wenn keine 0 zu finden ist, kann es da evtl. auch zu einer AV kommen, muss es aber nicht!
Vermutlich wird das der Fehler bei ihm sein:
Quote:
strcpy(buf,"Hallo!\0");
rc=send(connectedSocket,buf,6,0);
xNopex is offline  
Old 05/05/2012, 13:29   #9
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by xNopex View Post
Vermutlich wird das der Fehler bei ihm sein:
fügt strcpy nicht noch selbst eine 0 mit an? oder bin ich da falsch informiert?

ging dir vermutlich daraum, dass nur die bytes vom 'H' bis einschliesslich '!' gesendet werden?
Tyrar is offline  
Old 05/05/2012, 13:31   #10
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Jadoch schon, aber er sendet nur 6Zeichen. Also vergisst er die 0-Terminierung mitzusenden. Wenn er das immer so macht, dann failed das natürlich bei der Ausgabe.

EDIT: Brainfuck er terminiert ja beim Empfangen...
xNopex is offline  
Old 05/05/2012, 13:32   #11
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Quote:
Originally Posted by Dr. Coxxy View Post
1. so einen blocktext ohne absätze liest sich kein mensch durch.
2. erst die sprache lernen, dann sich mit etwas "kompliziertem" wie sockets befassen
3. dann sind auch diese unnötigen fragen "kann mir bitte jemand sagen, was an dem copy paste code falsch ist?!?!?" nicht mehr nötig.

kthxbye

EDIT:

schmeiß dein DEVC++ ausm fenster und hol dir visual C++ Express von microschrott.
1. Wenn du so einen Blocktext nicht lesen willst LASS ES - Niemand zwingt dich dazu..
Aber schreibe auch kein Kommentar hierzu ohne ihn zu lesen, das ist total Unnötig!
Und Welche IDE ich nutze ist komplett meine Entscheidung, das geht dich ein Käse an.
Ich mag kein .Net-Schrott und werde es auch niemals nutzen um zu Programmieren, Basta.
Grund dafür? Ich mag die Syntax und die vielen zusätzlichen Codezeilen nicht,
das macht das ganze Projekt total unübersichtlich und nunja,
es trägt nicht grade dazu bei einen Bug schnell zu finden, mir gefällt es einfach nicht.
2. Habe ich bereits geschrieben das ich die Sprache bereits sehr gut kann meiner Meinung,
mich aber noch nie wirklich gut mit Sockets auseinandergesetzt habe,
da werde ich ja wohl nach Hilfe fragen dürfen wenn ich nicht allene klar komme.
3. Lese mein Text durch dann wüsstest du es besser

@alle anderen
Habe den Puffer nun Vergrößert, bekomme leider immer noch einen Crash
"Programm wurde vorzeitig beendet" gibt es noch irgendetwas das den Crash verursachen könnte
Habe den Programmcode der strcpy() & sendet nun mal weggelassen um zu sehen ob es deswegen Crasht, leider nicht. Sobald man dem Server etwas sendet Crasht er

Liebe Grüßé,
Cy
Cyb0r is offline  
Old 05/05/2012, 13:49   #12
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
das mit der ide geht uns auch nichts an, allerdings können wir doch sicherlich andere ide's die eindeutig aktueller sind empfehlen?

ich bin kein microschrott fan, empfehle daher also code::blocks + mingw(-w64)
der gcc unterstützt sowieso sachen, von denen der msvc oder mingw von devc++ nur träumen (z.b. c++0x)
lediglich inline asm is fürn *****, aber das fürfte nicht interessieren, da man das mit nem assembler assemblieren und später selbst mit linken kann

ansonsten sehe ich jedenfalls keinen möglichen fehler im code, der buffer wird terminiert. damit fällt die mögliche AV bei cout weg.

debug ausgaben?
Tyrar is offline  
Old 05/05/2012, 13:52   #13
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Ich mag kein .Net-Schrott und werde es auch niemals nutzen um zu Programmieren, Basta.
Visual Studio ist auch direkt .Net, alles klar ;o

Quote:
das macht das ganze Projekt total unübersichtlich
Willst du behaupten, dein 'Code' sei übersichtlich?

Quote:
Habe ich bereits geschrieben das ich die Sprache bereits sehr gut kann
Haha, nein.

Quote:
ohne die ganzen fehler-kontrollen mit den if´s etc
Dort haben wir übrigens deinen Fehler. :>

Übrigens könntest du das ganze auch debuggen, schonmal dadran gedacht? :>
MoepMeep is offline  
Old 05/05/2012, 14:03   #14
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
msvc unterstützt aber dinge, die dich in schwierigkeiten bringen wenn man sie mit anderen compilern verwenden will

msvc würde das funktionieren:
Code:
enum HUMAN
{
    ME,
    MOEPMEEP,
    ****
};

HUMAN h=HUMAN::****;
aber nur msvc unterstützt das

als anfänger (wovon ich hier ausgehe) lernt man da schnell 'falsche' sachen!

Quote:
ich kann meiner meinung nach schon sehr gut
falsch.

es geht nicht nach deiner meinung!
vergleich doch mal baum mit wasser (? war es das? wer weiss worauf ich hinaus will?^^)

man kann keine relativen vergleiche anstellen. das ist einfach falsch, die können niemals stimmen!
entweder ist etwas gut oder schlecht, dazu darf es nur einen maßstab geben.
nicht mehr!

anderes (vermutlich besseres) beispiel:
ein kind (ca. 140): 'ich bin gross!'
ein erwachsener mensch (ca. 190): 'ich bin das echte gross!'
kapiert?
Tyrar is offline  
Old 05/05/2012, 14:05   #15
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Quote:
Originally Posted by MoepMeep View Post
Visual Studio ist auch direkt .Net, alles klar ;o
Willst du behaupten, dein 'Code' sei übersichtlich?
Haha, nein.
Visual Studio ist nicht gleich direkt .Net, aber schonmal jemand gesehen der nicht .Net mit Visual Studio codet? Das ist..etwas unnötig und überladen die Gui. Es erinnert mich irgendwie auch stark an meine Anfangszeiten damals als Kind wo ich mit Visual Basic v6.0 "Rumgeklickt" hab..
Ich mag die GUI einfach nicht, fühle mich darin total unwohl - vorallem wahrscheinlich weil wieder vieles anders ist und man haufenweise Errors entgegengeworfen bekommt wenn man versucht seine nomalen Codes die bisher liefen darin zum laufen zu bekommen.

Ansonsten.. Codeübersichtlichkeit?
Das ist Ansichtssache, für mich ist es einigermaßen Übersichtlich und ich komme damit klar, der Code soll ja aber auch keinen Schönheitswettbewerb gewinnen sondern ich soll ihn verstehen und er soll funktionieren
Auf Übersichtlichkeit im Code zu achten ist hilfreich wenn man ein Projekt nach einer langen Zeit wieder nutzen möchte, oder mit anderen daran arbeitet, aber zum lernen / rumprobieren mit einer neuen Funktion/Art da ist das meiner Meinung Sinnfrei
Zu den ganzen Fehlerkontrollierenden If´s -> Die Prüften ja nur ob die Verbindung geklappt hat, etwas Empfangen werden konnte etc. Das mach das ganze unübersichtlich zum lernen finde ich, verwirrt etwas wenn du da ein Bug hast und dann noch tausende unnötige Abfragen drin.
Bei größeren Projekten sind die aber sicher ganz nützlich, oder wenn mans dann schon beherrschen sollte.

Debugen hab ich schon versucht, komme da aber nicht wirklich ein nen Nenner Wenn ichs in Devc++ Debugge scheint es zu funktionieren, es Crasht nicht, gibt aber auch die empfangenen Daten nicht aus Am Ende wenn ich es beende, kommt jedoch "Acces Violation - Segmentation Fault" ..hmmm

@HeavyHacker
Es gibt immer jemand der es besser als man selbst kann, würde ich sagen "Ich kann gut programmieren" würde ich lügen,denn es wird immer jemanden geben der findet das ich schlecht bin oder nicht besonders gut. Das ist alles ne Subjektive Meinung von jeder Person selbst , wie gut jemand ist. Das kann man finde ich nicht so fest definieren wie in deinem Beispiel.
Beispiel:
Jemand kann sehr gut Konsolen Programme und die Grundbasics, schafft es einigermaßen gute Programme zu entwickeln. Sagen wir einfach er kann Cheats programmieren.
Das ist doch schon sehr gut ,würde diese Person denken.
Nun gibt es abe sicherlich Personen die Windows GUIs Programmieren, Ring0 Treiber Programmieren können , Netzwerk-Anwendungen und sonstigen Kram. Diese Person würde sich auch als "gut" ansehen, und die vorherige Person als schlecht/nicht gut. Nehmen wir die 3. Person hinzu, jemand der nur in Batch scripten kann, diese wird denken das Person 1 Sehr gut ist, und Person 2. ein Gott des Programmierens, einfach weil er es nicht besser weiß.
Es gibt immer jemand der einer anderer Meinung ist..

Grüße,
Cy
Cyb0r is offline  
Reply

Tags
cin, cout, crash, winsock


Similar Threads Similar Threads
Crash Frei 100%***~~~CyberRazzer NoMenu Chams/NoFog/FullBright!!!!!~~~***Crash Fre
11/30/2010 - WarRock Hacks, Bots, Cheats & Exploits - 66 Replies
Download: Removed! DT! Waiting for new Version!



All times are GMT +1. The time now is 01:15.


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.