Trädvy Permalänk
Medlem
Registrerad
Sep 2005

c++ sockets - hjälp!

Hejsan allihopa hoppas ni mår bra och är duktiga på c++!

Jag började lära mig c++ för ett par dagar sen (har programmerat en del förut, dock enklare språk lite vb.net och c#.net)
Jag är väldigt intresserad av nätverksprogrammering därför vill jag lära mig göra detta i c++.

Koden är tagen från CodeProject. Dock är killen som skrivit den koden lite halvt retarderad tror jag, så jag ändrade på vissa saker!

Problemet är att jag fastnar på denna print "Call to createsocket failed...\n" i run_server() som körs från main. Det verkar som den inte lyckas kalla på sjävla funktionen... eftersom den inte skriver ut något felmeddelande som finns i create_socker() funktionen.

Main koden: http://pastebin.com/f648f3fc

Header filen: http://pastebin.com/f313a96f

Tack i förväg till den som orkar kolla igenom och hjälpa till!

Trädvy Permalänk
Medlem
Registrerad
Aug 2009

created_from_accept sätts aldrig till true
så create_socket() returnar direkt

du kallar på
server_socket(int user_port_number):port_number(user_port_number)
inte
server_socket()

---

Och du borde kanske inte uttala dig om vad som är dålig kod när du bara suttit med språket i "några dagar"..

Trädvy Permalänk
Medlem
Registrerad
Sep 2005

Som sagt så har jag ju kodat ett tag... så de e c++ jag inte kan, har rätt bra kunskaper annars...
testade ta bort den ifen som frågar om created_from_accept == true funka endå inte.
En sak till jag undrar är varför jag måste kalla på server_socket() och inte på server_socket(inte user_port_number): port_number(user_port_number)

Jag är van med hur klasserna fungerar i java/c# så förstår inte riktigt om det ska vara new eller inte och när man ska använda det uttrycket så förklara gärna annars får jag väl läsa på mer!

Trädvy Permalänk
Medlem
Registrerad
Jan 2005

Kolla på följande

if (nret != 0) std::cout << "Could not create socket...\n";return false;

Det är samma sak som

if (nret != 0) std::cout << "Could not create socket...\n"; return false;

Tror du vill skriva

if (nret != 0) { std::cout << "Could not create socket...\n"; return false; }

Testade att ändra den raden och då dog den inte direkt i alla fall (har typ inte läst något annat av koden).

Trädvy Permalänk
Medlem
Registrerad
Aug 2009
Citat:

Ursprungligen inskrivet av kostas
Som sagt så har jag ju kodat ett tag... så de e c++ jag inte kan, har rätt bra kunskaper annars...
testade ta bort den ifen som frågar om created_from_accept == true funka endå inte.

Om du tog väck

if (created_from_accept) return false;

så borde du åtminstone få ut felmeddelanden nu..
edit: fixa det cic sa..

Citat:

Ursprungligen inskrivet av kostas
En sak till jag undrar är varför jag måste kalla på server_socket() och inte på server_socket(inte user_port_number): port_number(user_port_number)

du måste inte kalla på server_socket() du kan kalla på
server_socket(inte user_port_number) om du vill..
märkte bara att det var den andra du använde (och där sattes created_from_accept till false)

Citat:

Ursprungligen inskrivet av kostas
Jag är van med hur klasserna fungerar i java/c# så förstår inte riktigt om det ska vara new eller inte och när man ska använda det uttrycket så förklara gärna annars får jag väl läsa på mer!

Angående new operatorn, så används den för att allokera minne dynamiskt.
Lite om när du borde använda:
http://stackoverflow.com/questions/694807/c-dynamic-memory-al...

Trädvy Permalänk
Medlem
Registrerad
Aug 2009
Citat:

Ursprungligen inskrivet av cic
Kolla på följande

Det är samma sak som

Tror du vill skriva

Testade att ändra den raden och då dog den inte direkt i alla fall (har typ inte läst något annat av koden).

Nice.. den missade jag helt..

Trädvy Permalänk
Medlem
Registrerad
Sep 2005

Tack så mycket grabbar dumt av mig att skriva falsen direkt efter där... första gången jag gör det tänkte bara så det inte skulle bli lika messigt. Det roliga är att jag testade om de funka i en simpel applikation men jag testade bara "syntaxen" inte om själva ifen returnera false! jaja då vet man ska testa direkt om det funkar.

Tack för hjälpen och ska läsa på om dynamiskt minne men jag tror jag fatta vad du mena

Tack igen för all hjälp!