Socket wirft Invalid Handle

CodeFatal

Erfahrenes Mitglied
Hallo,

ich arbeite mich gerade in das Thema Sockets ein.
Es soll ein einfaches Server Client Problem gelöst werden.

Neben kleinen Erfolgserlebnissen habe ich nun ein Problem, welches ich nicht nachvollziehn kann. Vielleicht hat eure Erfahrung ja mehr Glück;)

Quellen:
Neben einigen Foren und Internet Quellen arbeite ich mit dem CHATSERVER Beispiel.
Das Anmelden an einem Server klappt auch bereits aber leider kann ich keine Daten versenden:(

Folgenden Quellcode habe ich mir ausgedacht:
Code:
HRESULT CMySocket::Init_Socket(SOCKET_TYP Typ)//Initialisiert Objekt je nach Wunsch als Server oder Client
{
	Release_Socket();//Alles Alte erstmal raus

	m_Typ = Typ;

	if(m_Typ == TYP_CLIENT)
	{
		if(!Create())return E_FAIL;
	}
	else if(m_Typ == TYP_SERVER)
	{
		if(!Create(SOCKET_STANDARD_PORT))return E_FAIL;
		if(!Listen())return E_FAIL;
	}
	//else return E_FAIL;

	//In und Out Richtig machen
	int error=0;
	p_Fil_Socket = new CSocketFile(this);
	if(!p_Fil_Socket)error = 1;
	else
	{
		p_Arc_In = new CArchive(p_Fil_Socket,CArchive::load);
		if(!p_Arc_In)error = 3;
		else
		{
			p_Arc_Out = new CArchive(p_Fil_Socket,CArchive::store);
			if(!p_Arc_Out)error = 3;
		}
	}

	if(error)
	{
		Release_Socket();
		return E_FAIL;
	}
	return S_OK;
}


HRESULT CMySocket::TX_Data(RB_Socket_Data *p2Send)//Sendet Daten
{
	if (p_Arc_Out != NULL)
	{
		if (p_Arc_Out->IsStoring())
		{
			TRY
			{
				p_Arc_Out->Write(p2Send,SIZE_RB_SOCKET_DATA);
				p_Arc_Out->Flush();
			}
			CATCH(CFileException, e)
			{
				int error = GetLastError();
				Release_Socket();
			}
			END_CATCH
		}
		else return E_FAIL;//Falsche Init
		return S_OK;
	}
	return E_FAIL;	
}

Von MySocket wird einmal CServer und einmal CClient abgeleitet.
Rufe ich einmal die "Write" Funktion wird kein Fehler erzeugt. Allerdings kommt auch nichts in der OnReceive des Partners an.
Bei dem zweiten Schreibversuch wird dann ein Fehler geschmissen. NR 6. Invalid Handle. Wo kommt das Ding her und was hab ich vergessen!?

Hoffe ihr könnt mir helfen.

Programmiere mit 2003.NET / XP / MFC

Gruß Michael
 
Hallo,

Problem gelöst :D

Folgende Einträge fehlten: (Jeweils für CMySocket, CServer und CClient)

Header:
DECLARE_DYNAMIC(CMySocket);

CPP:
IMPLEMENT_DYNAMIC(CMySocket, CSocket)

Vielleicht hilft es ja dem nächsten. Die Zeilen sind auch in dem oben genannten Beispiel zu finden.

Gruß Michael
 
Zurück