UDP Socket definieren

Komischerweise, tritt gar kein Fehlercode auf. Kompilieren funktioniert ohne Probleme, nur wenn ich verbinden will, tut er das nicht. Hab beide Seiten auf UDP definiert, den Server und den Client.

.
.
.
// Client, einen Standard-Socket erzeugen
m_sConnectSocket.Create(0,SOCK_DGRAM);
// Verbindung zum Server öffnen
m_sConnectSocket.Connect(m_strName, m_iPort);
}
else
{
// Server, einen Socket für den angegebenen Anschluß erzeugen
m_sListenSocket.Create(m_iPort,SOCK_DGRAM);
// Auf Verbindungsgesuche hören
m_sListenSocket.Listen();
.
.
.

In der MSN steht folgendes drin:
--
BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );

nSocketType
SOCK_STREAM <--TCP
or
SOCK_DGRAM <--UDP
--
was ich jetzt mal auf
m_sConnectSocket.Create und
m_sListenSocket.Create
bezogen hab.
 
Zuletzt bearbeitet:
Ich meinte Runtime-Fehlercodes... wenn's nicht funktioniert muss immer irgendwo ein Fehlercode auftreten. Die meisten WinAPI-Funktionen geben Erfolg/Misserfolg zurück und per GetLastError() lässt sich der genaue Fehler finden.
Bau mal bei jeder Funktion Fehlerchecks ein.
 
Sorry, aber ich hab absolut keine Ahnung, wie ich Fehlercodes einbauen kann. In der KLasse CMySocket steht zB sowas drinnen:

---
void CMySocket::OnConnect(int nErrorCode)
{
// Sind Fehler aufgetreten?
if (nErrorCode == 0)
// Nein, OnAccept-Funktion des Dialogfelds aufrufen
((CSockDlg*)m_pWnd)->OnConnect();

}
---
Jetzt muß es doch auch möglich sein den Wert von nErrorCode auszugeben.
Und bitte schreib ein Codebeispiel, ansonsten kapier ichs net;((. Hab doch gerade erst angefangen.:%

Und dann hab ich noch ne andere Frage, wie ist es möglich dass ein Programm Startparameter, wie "..\test.exe Test" oder "..\test.exe p:Test" oder "..\test.exe /Test" ausliehst. Hab folgendes gefunden, aber irgendwie klappt es nicht, vielleicht weil es für den Borland C++ Compiler ist?

---
Ganz einfach mit der Abfrage
if (LowerCase(ParamStr(1))=="about")
beliebig im Programm.

ParamStr(1) liefert uns den ersten Parameter.
ParamStr(0) liefert uns den Namen des Programms.
Mit ParamStr(2) erhalten wir bei
"C:\Programme\MeinProgramm\MeinProgramm.exe about,fake"
den Parameter "fake".
---
 
Paramete: CWinApp hat die Member-Variable "m_lpCmdLine", das ist die Kommando-Zeile mit der das Programm aufgerufen wurde (gleich wie der entsprechende WinMain()-Parameter)

Was ich wg. Error-Codes meinte (Beispiel):

Code:
if(!m_sConnectSocket.Create(/*...*/))
{
    // Fehler ist aufgetreten
    int fehlercode = m_sConnectSocket.GetLastError()

    // ... Message-Box mit Fehler ausgeben ...
    // (Mit "FormatMessage()" kannst du aus dem Code auch eine schöne
    // Fehlermeldung machen).
}

Alternativ kannst du auch mal im Debugger schaun, ob die vielleicht so was findest...
(in meinem Tutorial is ne kurze Einführung in das Grundlegenste mit dem Debugger)
 
So, jetzt hab ich folgendes eingebaut:

---
void CMySocket::OnConnect(int nErrorCode)
{
// Sind Fehler aufgetreten?
if (nErrorCode == 0)
// Nein, OnAccept-Funktion des Dialogfelds aufrufen
((CSockDlg*)m_pWnd)->OnConnect();

int fehlercode = CMySocket::GetLastError();
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,NULL,fehlercode,MAKELANGID
(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL);
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "ErrorConnect", MB_OK |
MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
}
---

Nur, es wird absolut nichts ausgegebn, nur eine kurze Meldung von OnSend, dass es keine Probleme gab. Hab ich die Fehlerroutine richtig eingegeben oder muß sie wo anders hin?
 
du sollst nicht den Parameter überprüfen, sondern die Rückgabewerte der Funktionen, die du aufrufst (z.b. Create())
 
@DanielKobzan

genau da ist das probelm an diesem buch , es wird zwar alles gezeigt , vom kleinen süssen malproggi bis hin zu einem chatsystem oder ähnlichen aber verstehen tut es jemand der keine ahnung hat nich, da es is diesem buch einfach lausig erklärt ist !

ps.: wenn ich da sma so anmerken darf :) , is in keinster weise böse oder so gemein , einfach nur nen scheiss buch !
 
Dass es ein ****** Buch ist hab ich schon bemerkt, aber es war das einzige "Tutorial" im Web, dass ich gefunden habe, dass den Aufbau eines Socketprogrammes, also Server / Client, Schritt für Schritt beschreibt. Wie das funktioniert, dass schaff ich schon weitgehend aus den Schritten rauszulesen. In der Hinsicht erfüllt es genau, zumindest dieses Kapitel, meine Wünsche, nur dass ich UDP brauch. Ich will nähmlich ein Connecttool für CounterStrike schreiben, was prüft ob mein Stammserver voll ist und wenn nicht connectet und wenn doch voll so lange abfragt, bis er leer ist. Es hat mich nämlich immer gestört retry in die console einzugeben. Und Rcon auf HL Servern benötigt nunmal UDP. Ich hab sowas schon in VB geschrieben und will es jetzt als Einstiegsprojekt für C++ verwenden. Dazu brauch ich:

- Eine Clientlösung (mit UDP)
- Startparameter auslesen (wills net nur für einen Server verwenden)
- substr(); (Rückgabe vom Server muß ausgearbeitet werden)

Und von diesen Punkten fehlt mir eigentlich nur noch das UDP. Vielleicht weiß ja einer ein gutes Tutorial über Server / Client, dass auch UDP erwähnt. Ansonsten werd ich mich heute noch mal hinsetzen, den Debugger verwenden, is fast das selbe Prinzip wie in VB, und versuchen den Fehlercode einzubauen. So, ich glaub das war ein erster Einblick, von dem was ich machen will und auch werde, weil das nevt nämlich schon ganz schön mit den retrys.
 

Neue Beiträge

Zurück