UDP Server



  • Hallo!

    Ich habe vor einiger Zeit einen kleinen UDP Server als Konsolenanwendung geschrieben.

    Ich möchte diesen UDP Server nun in eine Windows Forms-Anwendung einbauen.

    Leider will es einfach nicht klappen.

    Die Konsolenanwendung sieht wie folgt aus:

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    #include <stdio.h>
    #include <winsock2.h>
    #include <string>
    #include <iostream>
    #include "timer.h"
    #include <cstring> 
    #include <algorithm> 
    #include <vector>
    
    #define SERVER_PORT 5478
    #define BUF_MAXLEN 1024
    
    long WinsockStartup() 
    { 
          WSADATA wsa; 
    
      return WSAStartup(MAKEWORD(2,0),&wsa); 
    }
    
    // Das einzige Anwendungsobjekt
    
    CWinApp theApp;
    
    using namespace std;
    
    unsigned char buffer[BUF_MAXLEN];
    SOCKADDR_IN blubber;
    int clientsconnected = 0;
    int alblubber;
    SOCKET sockblubber;
    int hall = 0;
    
    UINT KeepAliveThread( LPVOID pParam )
    {
    	for(;;)
    	{
    
    			[...]
    
    	}
        return 0; 
    }
    
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    	int nRetCode = 0;
    
    	// MFC initialisieren und drucken. Bei Fehlschlag Fehlermeldung aufrufen.
    	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    	{
    		// TODO: Passen Sie den Fehlercode an Ihre Anforderungen an
    		_tprintf(_T("Schwerwiegender Fehler: MFC-Initialisierung fehlgeschlagen\n"));
    		nRetCode = 1;
    	}
    	else
    	{
    
    		AfxBeginThread(KeepAliveThread, NULL);
    
    		/* Server für UDP */
    		int rc; /* Variable fuer Rueckgabewerte */
    		int al;
    
    		SOCKET sock;
    		SOCKADDR_IN addr;
    		SOCKADDR_IN sender;
    
    		addr.sin_addr.s_addr = 0;
    
    		addr.sin_family = AF_INET;
    		addr.sin_port = htons(SERVER_PORT);
    
    		/* Nur unter Windows erforderlich */
    		rc = WinsockStartup();
    
    		/* Socket anlegen und binden */
    		sock = socket(AF_INET,SOCK_DGRAM,NULL);
    		bind(sock, (SOCKADDR*)&addr, sizeof addr);
    
    		/* In Endlosschleife auf Pakete warten
    		* */
    		//int packet = 1;
    		for( ;; )
    		{
                       [...]
    

    Da ich vorher noch nie eine Windows Forms-Anwendung erstellt habe, komme ich nicht wirklich voran.

    Ich habe versucht den UDP Server einfach vor das

    return 0;

    in

    int APIENTRY _tWinMain

    einzubauen. Ergebnis waren ein Haufen nicht aufgelöster externer Symbole.

    Wie ich den KeepAliveThread in einer Windows Forms-Anwendung starten kann weiß ich auch noch nicht.

    Ich hoffe jemand ist so nett und kann mir bei den wohl ziemlich grundlegenden Problemen helfen.

    Gruß,
    Bull



  • Unter .NET gibt es viel bessere, einfachere und elegantere Wege für dein Vorhaben.

    Benutze doch die Klassen aus dem Namespace System.Net
    MSDN: http://msdn.microsoft.com/en-us/library/system.net.aspx

    Simon


Anmelden zum Antworten