Handle für Socket

gehrti

Mitglied
Hallo!

Ich habe mir in meiner dialogbasiert MFC Anwendung ein eigene Socketklasse, abgeleitet von CAsyncSocket, erstellt.

In dieser Klasse habe ich ua. die OnReceive Funktion überschrieben, die dann die OnReceive Funktion des Hauptprogrammes aufruft, die die Socketobjekte meiner Socketklasse enthält.

Code:
void CMySocket::OnRecv(int nErrorCode)
{
	if (nErrorCode == 0) ((CSimulatorDlg*)wMyPWnd)->OnRecv();
}

Mein Problem ist folgendes:

Ich habe im Hauptprogramm eine Array von Sockets, für jeden Client einen Socket. Wie kann ich in dieser Funktion das eindeutige Handle des Socket herausbekommen, um dieses an die OnRecv Funktion zu übergeben?
Ich habe es moment so gelöst, dass ich mir den Socketname und Port hole und diese übergebe und im Hauptprogramm dann danach parse. Ich finde diese Lösung aber nicht so toll und such nach einer anderen Idee.

Die momentan Funktion in der Socketklasse sieht wie folgt aus:

Code:
void CMySocket::OnRecv(int nErrorCode)
{
	CString sSock;
	UINT uiPort;
	GetSockName(sSock,uiPort);
	if (nErrorCode == 0) ((CSimulatorDlg*)wMyPWnd)->OnRecv(sSock,uiPort);
}

und im Hauptprogramm:

Code:
void CSimulatorDlg::OnRecv(CString sSock,UINT uiPort)
{
	int i;
	CString sTemp;
	UINT uiTemp;
	for (i=0;i<MAXANZVERB;i++) {
		sConnectSocket[i].GetSockName(sTemp,uiTemp);
		if ((sTemp==sSock) && (uiTemp==uiPort)) {
			char *pBuf = new char[1025];
			int iBufSize = 1024;
			int iRcvd;
			CString strRecvd;
			iRcvd = sConnectSocket[i].Receive(pBuf, iBufSize);
			if (iRcvd != SOCKET_ERROR) {
			pBuf[iRcvd] = NULL;
			strRecvd = pBuf;
                                                .... usw.
			}
		}
	}
}

Habt Ihr ne Idee, wie ich zum Beispiel an den Pointer auf den Socket in der Socketklasse herankomme um diesen dann zu übergeben?

MfG. Thomas
 
Habs hinbekommen!

Langes und intensives Lesen in der MSDN hilft doch.
Hatte nur gedacht jemand könnte mir spontan nen Tip geben.

MfG. Thomas
 
Zurück