Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
22.09.2003, 19:56
snoopdog



Moin Jungs, hab da nen kleines Problem mit den UDP verbindungen.
bei der Funtkion Receivefrom schmeist mir der ms compiler diese fehlermeldung aus.

Quellcode:ompilierung läuft...
ServerDlg.cpp
I:\Programmierung\Havoc View\Server\ServerDlg.cpp(125) : error C2664: 'int __thiscall CAsyncSocket::ReceiveFrom(void *,int,class CString &,unsigned int &,int)' : Konvertierung des Parameters 3 von 'struct sockaddr_in *' in 'class CString &' nicht mo
eglich
        Ein Verweis, der nicht auf ein 'const' zeigt, kann nicht an einen Wert gebunden werden, bei dem es sich nicht um einen L-Wert handelt
Fehler beim Ausführen von cl.exe.
so sieht meine receivefrom funktion aus...

Quellcode:RemoteAddrLen=sizeof(SOCKADDR_IN);
    CSocketClass->ReceiveFrom(&buffer2,strlen(buffer2),&RemoteAddr,&RemoteAddrLen,0);

__________________________________
und hier die var deklaration:
    SOCKADDR_IN RemoteAddr;
    int RemoteAddrLen;
warum gibt der mir ne fehlermeldung aus??

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
001
23.09.2003, 12:05
the_viking



in der dekl. von ReveiveFrom ist der 3. parameter ein (classCString&), aber du rufst die Funktion anstatt mit einem CString mit einer SOCKADDR_IN auf. irgendwie kann das nicht gutgehen oder?

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
002
23.09.2003, 15:35
snoopdog



ja ne das ist mir klar... dann sag mir auch was anstatt SOCKADDR_IN ich nehmen soll

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
003
23.09.2003, 16:11
[RMen]OneStone



Einen CString.... oO

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
004
23.09.2003, 17:29
snoopdog



haha....

mal ne vernünftige Antwort??

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
005
23.09.2003, 20:55
Leviathan



Ohne dass ich auch nur die allergeringste Ahnung von Netzwerkprogrammierung habe:

von CAsyncSocket::ReceiveFrom() gibt es 2 Überladungen:Quellcode:int ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 );

int ReceiveFrom( void* lpBuf, int nBufLen, SOCKADDR* lpSockAddr, int* lpSockAddrLen, int nFlags = 0 );
Du brauchst die zweite. Diese erwartet aber als 3. Paramater einen Zeiger auf ein SOCKADDR. Du übergibst ein SOCKADDR_IN. Du musst also aus einem SOCKADDR_IN-struct irgentwie ein SOCKADDR-struct machen und dieses dann übergeben. In der MSDN steht (unter SOCKADDR Structure) dazu, dass du einfach casten kannst. Also:

Quellcode:RemoteAddrLen=sizeof(SOCKADDR_IN);
    CSocketClass->ReceiveFrom(&buffer2,strlen(buffer2),&((SOCKADDR)RemoteAddr),&RemoteAddrLen,0);
Ich übernehme keinerlei Garantie, da ich mich wie gesagt mit Netzwerkprogrammierung überhaupt nicht auskenne und auch nicht weiss, wofür die benutzten Klassen und Methoden gut sind.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 23.09.2003 um 20:56 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
23.09.2003, 21:52
snoopdog



hm genau so hab ich es auch eben schon gemacht, bevor ich des gelesen habe...

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
007
23.09.2003, 21:58
Leviathan



Heißt das, dass es funktioniert oder heißt das, dass es nicht funktioniert?

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
008
24.09.2003, 10:45
snoopdog



sagen wir es so...jaein...

also ich bekomme keine Fehlermeldungen, bekomme aber auch keine Antwort von dem Server. Der Buffer bleibt leer..

Ich Versuche mich mit einem Half-Life Server zu verbinden, um den status des servers abzufragen, indem ich ihm den Befehl status sende. Daraufhin sollte ich ja auch eine antwort bekommen, tut sich aber nix...

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
009
25.09.2003, 15:01
[RMen]OneStone



Finger weg von MFC, wenn schon Windows wenigstens WinAPI:

Quellcode:int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char * szCommandLine, int nShowMode)
{
  SOCKET sckSocket;

  {
    WORD wVersionRequested = MAKEWORD(2, 2);
    WSADATA wdData;

    WSAStartup(wVersionRequested, &wdData);
  }

  // ...

  return 0x00000000;
}
Und so weiter...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/


Dieser Beitrag wurde am 25.09.2003 um 15:02 von [RMen]OneStone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
26.09.2003, 16:18
the_viking



Tja leider kann man mit der MFC viel kompfortabler Anwendungen (besonders dialoganwendungen) programmieren ;)

Ich glaube für ein so einfaches Tool sollte man nicht das Rad neuerfinden..

Allerdings kann man berkley socks auch in der MFC verwenden ;)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
011
28.09.2003, 15:20
Prefect



Nun, vielleicht wäre ein bißchen mehr Kontextinfo ganz hilfreich. Besonders wichtig ist hier, dass du eine Klasse names CAsyncSocket verwendest. Da sollten die Alarmglocken schrillen - denn asynchrones Programmieren ist *nicht* so einfach, wie die meisten Anfänger denken.

Wenn du z.B. das Query-Paket schickst, und gleich darauf ReceiveFrom() aufrufst, dann kann da gar nichts ankommen, weil der Server in dieser kurzen Zeit das Paket ja noch gar nicht gekriegt hat.
Ich habe auch schon Leute gesehen, die so konfus waren, dass sie das Query-Paket über einen Socket geschickt haben, und recvfrom() für einen anderen Socket aufgerufen haben - das kann natürlich auch nicht gut gehen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche