error: expected constructor... [MEGOLDVA]

Fórumok

Szerk.:

A működő változat:
(csak hogy ne a hülyeség maradjon itt, htha valakit érdekel a socket)


#include stdlib.h
#include stdio.h
#include string.h
#include signal.h
#include netdb.h
#include sys/prctl.h
#include netinet/in.h
#include arpa/inet.h
#include sys/types.h
#include sys/socket.h

int main(){

int my_socket;
int length;

struct sockaddr_in me;
struct sockaddr_in dest;

char buf[ ]="proba";

my_socket = socket( AF_INET, SOCK_DGRAM, 0 );

me.sin_family = AF_INET;
me.sin_port = htons(12343);
me.sin_addr.s_addr = inet_addr("127.0.0.1");
memset( &(me.sin_zero), '\0', 8 );

dest.sin_family = AF_INET;
dest.sin_port = htons(12344);
dest.sin_addr.s_addr = inet_addr("127.0.0.1");
memset( &( dest.sin_zero), '\0', 8 );

length = sizeof( struct sockaddr_in );
bind( my_socket, (struct sockaddr *)&me, length );

sendto( my_socket, buf, strlen(buf), 0, (struct sockaddr *)&dest, length );

return 0;

}

--------------------------------------

Hello,

újabb kérdésem van.
UDP-s kommunikációt szeretnék készíteni, de nem fordul, még rosszabb, hogy nem tudom miért :)
Egyébként a hiba nem valószínű, hogy kifejezetten az UDP-implementáció miatt van, valószínűleg hiányzik egy header, vagy ilyesmi, de sehogy sem sikerült rájönnöm, hogy mi.

A kód:

#include stdlib.h
#include stdio.h
#include iostream
#include string.h
#include signal.h
#include netdb.h
#include sys/prctl.h
#include netinet/in.h
#include sys/types.h
#include sys/socket.h

using namespace std;

int my_socket;
int length;
struct sockaddr_in me;
struct sockaddr_in dest;

char buf[ ]="proba";

my_socket = socket( AF_INET, SOCK_DGRAM, 0 );

me.sin_family = AF_INET;
me.sin_port = 0;
me.sin_addr = INADDR_ANY;
memset( &(me.sin_zero), '\0', 8 );

dest.sin_family = AF_INET;
dest.sin_port = htons(12344);
dest.sin_addr = inet_addr("127.0.0.1");
memset( &( dest.sin_zero), '\0', 8 );

length = sizeof( struct sockaddr_in );
bind( my_socket, (struct sockaddr *)&me, length );

int main(){
sendto( my_socket, buf, strlen(buf), 0, (struct sockaddr *)&dest, length );
return 0;
}

-----------------
A hibaüzenet:

client2.cpp:21: error: expected constructor, destructor, or type conversion before ‘=’ token
client2.cpp:23: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:24: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:25: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:26: error: expected constructor, destructor, or type conversion before ‘(’ token
client2.cpp:28: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:29: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:30: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:31: error: expected constructor, destructor, or type conversion before ‘(’ token
client2.cpp:33: error: expected constructor, destructor, or type conversion before ‘=’ token
client2.cpp:34: error: expected constructor, destructor, or type conversion before ‘(’ token

a 21. sor egyébként a my_socket = socket( AF_INET, SOCK_DGRAM, 0 );

----------------

Hozzászólások

Hu, ez gaz! Mielott UDO-vel kezdenel jatszadozni, illene megbaratkoznod magaval a nyelvvel, tudod, hello world, stb...

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

?

Nem értem egészen mit akarsz. Mi az UDO?
Ha arra gondolsz, hogy ronda, ez egy proof of concept kód az UDP szempontjából, kb. 5 perc alatt ütöttem össze innen kimásolva:

http://informatik.unibas.ch/lehre/ss06/cs221/_Downloads/cs221-socket-sl…

gyakorlatilag megegyezik a 13. oldallal

Milyen legyen?

Az rendben van, de először tedd tisztába magadban, hogy mi a deklaráció és mi a definíció, valamint, hogy a programkódot hova kell rakni. Továbbá, ha már C++ -l játszadozol, akkor először nézz még utána, hogy hogy szokás egy OOP nyelvben kódolni.

----------------
Lvl86 Troll

Ha tisztába lennél, már rég észrevetted volna, hogy ez programkód, amit egy függvényen belül szokás elhelyezni.

A következő rész még valóban lehet függvénytörzsön kívül, de nem szép OOP nyelvben mindenféle globális változóval játszadozni.


int my_socket;
int length;
struct sockaddr_in me;
struct sockaddr_in dest;

char buf[ ]="proba";

C++ az nem PHP, hogy szinte ott túrsz bele bármibe, ahol jól esik.

----------------
Lvl86 Troll

subscribe a konokságod miatt. Kívácsi vagyok, miket hordasz még itt össze.

Ide még csak iostream, meg std namespace sem kell, a programod gcc-vel lefordul, csak a kódot a main()-be kéne tenni. Aztán van benné még butaság, amikor az értékadó egyenlő jel baloldalán valami struct in_addr van, a jobb oldalán meg egy integer. Valami ilyesmi lenne szintaktikailag helyesen, persze át kéne tanulmányozni a struct sockaddr_in-t: me.sin_addr.s_addr = INADDR_ANY;

és ofkoz megnéztem a linkelt pdf-et, ott sem mondja sehol, hogy ezt main()-en kívül kell írni.

nem vagyok konok, hülyeséget csináltam, ld. lejjebb. Azt, hogy a main-en kívülre került, azt konkrétan nem abból szedtem, hanem egy másikból, de ott sem a main-en kívül volt, csak elnéztem, mert ott egy headerben volt, és főleg azzal foglalkoztam, és nem néztem meg rendesen, hogy valójában hol az #include, de ez most már mindegy.

> nem vagyok konok
Érzed az önellentmondást, igaz? Mindegy, szerintem örülj neki, hogy a tudatlanságod ellenére ennyien segítettünk, és csak páran küldtek el melegebb éghajlatra.

Nem lett volna szánalmas bevallani, hogy fogalmad sem volt róla, elvégre mi sem C-tudással születtünk, így viszont azzá váltál.

Üdv!
Szerintem kezdetnek tedd át a using namespace és a main közötti részt a main-be!
Szinte biztos hogy amiatt panaszkodik, a main függvényen kívül max globális változó deklarációkat tehetsz, függvényhívásokat nem.

Fogalmam sincs mi volt abban a példában úgyhogy nem tudom miért működhetett. ;)
Mindenesetre ilyet ne csinálj, globális változókat általában nem szép használni.
Én is csak azt tudom tanácsolni, hogy mielőtt hálózatkezeléssel meg ilyesmivel foglalkoznál, előbb ismerkedj meg a nyelvvel jobban.

Na, működik.

Bocsánat mindenkitől, jogos az értetlenkedés, ezt csúnyán benéztem. Ma vaéahogy agynélküli üzemmódban vagyok és ész nélkül másoltam a kódrészleteket. De most ettől függetlenül sem tudnék értelmes magyarázatot adni rá, hogy miért csináltam triviális hülkyeségeket.