SOCKETS & Threadding
-
Hi an alle,
ich habe ein kleines Problem und zwar geht es um folgendes.Ich möchte ein Client mit GUI für ein CE Gerät schreiben der Befehle entgegen nimmt und diese dann abarbeitet.
Die GUI besteht nur aus einer multilined Textbox die nur den Status anzeigen soll was der Client gerade macht.
Die Aufgaben die der CLienet übernimmt sollen in einen eigenen Thread, damit die GUI nicht einfriert während Aufgaben zu erledigen sind.
Jetzt zum Problem:
Ich bin gerade dabei eine Klasse zu bastel, die das ganze Connection Management erledigen soll.
In meiner InitializeSocket Methode klappt das Initialisieren auch, jedoch ist nach verlassen der Methode der Socket ungültig und ich weiss nicht warum.
Kann mir da jemand von euch weiter helfen?bool Connection::InitializeSocket() { bool bRetVal = false; WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult == NO_ERROR) { SOCKET m_socket =socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); if ( m_socket == INVALID_SOCKET ) { WSACleanup(); } else { sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = GetOwnIp(); service.sin_port = htons(31337); if ( bind(m_socket, (SOCKADDR*) &service, sizeof(service)) == SOCKET_ERROR) { closesocket(m_socket); } else { bRetVal = true; } } } return bRetVal; }Der Worker thread sieht bisher noch so aus
DWORD CPanelTestsuiteClientDlg::BackgroundWorker(LPVOID lpParam) { CPanelTestsuiteClientDlg* pThis = (CPanelTestsuiteClientDlg*)lpParam; pThis->WriteStatusMessage(L"Hello, I am the Backgroundworker"); Connection con; if ( false != con.InitializeSocket() ) { //... } return 0; }schonmal vielen Dank für eure Hilfe,
Gruß
Sascha
-
In meiner InitializeSocket Methode klappt das Initialisieren auch, jedoch ist nach verlassen der Methode der Socket ungültig und ich weiss nicht warum.
Weil es lokal zur Funktion ist. Mache ein Member der Klasse Connection daraus.
-
Wie kann man nur so blind sein ....

ich hab es vorher direkt lokal zum testen versucht und dann beim copy&paste vergessen das SOCKET zu entfernen...

Damit wird m_socket der Klasse verdeckt ...
Danke,
Gruß,
Sascha