Acess Violation
-
funst soweit ganz gut bis auf diesen fehler hier
:
error C2664: 'sendto' : Konvertierung des Parameters 2 von 'Message' in 'const char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
-
Versuch das ganze einfach mal zu casten (falls du es noch nicht hast): (const char
sendPacket. Du kannst es auch mal mit (const char
&sendPacket probieren...
cya
-
bool sendUdpPacket(stPacket thisPacket, SOCKADDR_IN thisRemoteAddr) { long result; int remoteAddrLen=sizeof(SOCKADDR_IN); char sendBuffer[BUFFER_SIZE]; stPacket sendPacket = (stPacket)sendBuffer; sendPacket->command = thisPacket->command; sendPacket->pass = thisPacket->pass;
hm ...
du machst da ja wilde sachen, fangen wir mal vorn an:bool sendUdpPacket(stPacket thisPacket, SOCKADDR_IN thisRemoteAddr)
also du übergibts ein stPacket an die Funktion ... laut definiton ist dies ein Pointer!! auf einen "Message-Struct". Daran ist eigentlich nichts verwerflich, wenn du den Zeiger, den du an die Funktion übergibst vorher füllst. Beispiel:
stPacket sendPacket; //zeiger anlegen sendPacket = new Message; //zeigeradresse speicher zuweisen sendPacket->command = 5; // daten eintragen strcpy(sendPacket->pass,"passwort"); // string kopieren ! // abschicken sendUdpPacket(sendPacket, irgendEineRemoteAddr); // speicher wieder freigeben !!! delete sendPacket;
SO, wenn du das so machst, dann brauchst du in deiner sendUdpPacket garnicht so wildes zeug machen. Es sollte genügen:
bool sendUdpPacket(stPacket thisPacket, SOCKADDR_IN thisRemoteAddr) { long result; int remoteAddrLen=sizeof(SOCKADDR_IN); result=sendto(sock,(const char*)thisPacket,sizeof(Message),0,(SOCKADDR*)&thisRemoteAddr,remoteAddrLen); ...
grüsse
[ Dieser Beitrag wurde am 16.03.2003 um 13:21 Uhr von soUrcerer editiert. ]
-
soUrcerer hast du den code selber mal getestet?? compilieren kann ich ihn zwar aber bei ausführen bekomm ich mal wieder eine neue fehlermeldugn
:
"Debug Assertion Failed"
Hat nicht irgendjemand nen funktionierendes programm (von mir aus auch nen trojaner o.ä.) von dem er mir den source schicken könnte? dann könnt ich mir da die entsprechenden stelle eifach rauskopieren!
[ Dieser Beitrag wurde am 16.03.2003 um 16:42 Uhr von Monchi*96 editiert. ]
-
so durch einbischen rumprobieren funktioniert der code! danke!!
ich könnte aber noch mal hilfe bei dem empfangen von daten gebrauchen.
anderer code aber gleiches problem!void recivePack() { long result; int remoteAddrLen=sizeof(SOCKADDR_IN); stPacket recievePacket; //zeiger anlegen recievePacket = new Message; //zeigeradresse speicher zuweisen SOCKADDR_IN RemoteAddr; result=recvfrom(sock,(char*)recievePacket,sizeof(Message),0,(SOCKADDR*)&RemoteAddr,&remoteAddrLen); if(result==SOCKET_ERROR){ printf("Fehler: recvfrom, fehler code: %d\n",WSAGetLastError()); } else{ switch(recievePacket->command){ case CMD_PING: printf("%d Bytes empfangen!\n", result); printf("CMD_PING von %s:%i\n", RemoteAddr.sin_addr, RemoteAddr.sin_port); break; default: printf("%d Bytes empfangen!\n", result); break; } } delete recievePacket; }
[ Dieser Beitrag wurde am 16.03.2003 um 17:49 Uhr von Monchi*96 editiert. ]
-
Original erstellt von Monchi*96:
soUrcerer hast du den code selber mal getestet?? ...nein ... ich hab ehrlichgesagt kein bock mir da erst nen projekt anzulegen, um das zu testen, sorry.
Das ist alles nur theorie
---Aber bei deiner Funktion sehe ich auf den ersten blick auch keine fehler ...
Kannst du mal die genaue Fehlermeldung posten??
grüsse
-
ist die selbe fehler meldung wie oben!
"Unbehandelte Ausnahme in server.exe: 0xC0000005: Access Violation[EDIT]
printf("CMD_PING von %s:%i\n", RemoteAddr.sin_addr, RemoteAddr.sin_port);
wenn ich diese zeile raus nehme gehts!
weiß jemand wo da der fehler liegt??
[/EDIT][ Dieser Beitrag wurde am 17.03.2003 um 13:34 Uhr von Monchi*96 editiert. ]
-
%s innerhalb von printf sagt dem String-Parser, dass es sich beim Parameter RemoteAddr.sin_addr um einen String handelt. Ist das etwa andem?
-
geht das?
printf("CMD_PING von %s:%i\n", inet_ntoa(RemoteAddr.sin_addr), RemoteAddr.sin_port);
[edit]
hab ich middem google gefunden: is zwar n tut für unix, aber die funktionen sind die gleichen.http://www.cpp-home.com/tutorial.php?25_2
[/edit]
grüsse
[ Dieser Beitrag wurde am 17.03.2003 um 15:50 Uhr von soUrcerer editiert. ]
-
jo hast recht!
so damit wären alle meine fragen geklärt und probleme beseitigt!
danke nochmal an alle die mir geantwortet haben! besonderes dankeschön ghet an soUrcerer für seine sehr ausfühlichen hilfen!wir sehen uns bei meinem nächsten problem