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.aspxSimon