CAsyncSocket Übertragungsproblem



  • Hi,

    ich habe mal versucht mich selbst mit Socketprogrammierung zu beschäftigen. Ich habe jetzt schonmal folgendes gemacht:

    //WinMsgDlg.cpp
    //
    
    //Bei empfangen von Daten
    void CWinMsgDlg::OnReceive(int nErrorCode)
    {
    	char *buf="";
    	sock->Receive(buf,1024);
    	MessageBox(buf,"hi",MB_OK);
    }
    
    //Verbindungsüberprüfung
    void CWinMsgDlg::OnConnect(int nErrorCode)
    {
    	if(nErrorCode)
    	{
    		switch(nErrorCode)
    		{
    		[...]
    		}
    	}
    	else
    		MessageBox("Verbindung hergestellt","Erfolg",MB_OK);
    }
    
    //Verbindung erlauben
    void CWinMsgDlg::OnAccept(int nErrorCode)
    {
    	sock->Accept(connecter);
    }
    
    //An port m_port hören
    void CWinMsgDlg::OnBnClickedListen()
    {
    	UpdateData(true);
    
    	CButton *listen=(CButton*)GetDlgItem(ID_LISTEN);
    	CButton *send=(CButton*)GetDlgItem(ID_SEND);
    
    	//Socket öffnen und hören
    	CString buf="";
    	listen->GetWindowText(buf);
    	if(!strcmp(buf.GetBuffer(),"Listen"))
    	{
    		sock->Create(atoi(m_port.GetBuffer()),SOCK_STREAM);
    		sock->Listen();
    		listen->SetWindowText("Stopp");
    		send->EnableWindow(false);
    	}
    	else 
    	{
    		if(strcmp(buf.GetBuffer(),"Stopp")==0)
    		{
    			sock->Close();
    			listen->SetWindowText("Listen");
    			send->EnableWindow(true);
    		}
    	}
    
    	buf.ReleaseBuffer();
    	m_port.ReleaseBuffer();
    
    	UpdateData(false);
    }
    
    //String an Server senden
    void CWinMsgDlg::OnBnClickedSend()
    {
    	UpdateData(true);
    
    	//Verbindung herstellen und Text senden
    	sock->Create(atoi(m_port.GetBuffer()),SOCK_STREAM);
    	sock->Connect((LPCTSTR)m_ip.GetBuffer(),atoi(m_port.GetBuffer()));
    	sock->Send(m_message.GetBuffer(),sizeof(m_message.GetBuffer()));
    	sock->Close();
    
    	m_ip.ReleaseBuffer();
    	m_port.ReleaseBuffer();
    	m_message.ReleaseBuffer();
    
    	UpdateData(false);
    }
    
    //Sockets.cpp
    //
    
    void CMsgAsyncSock::SetParent(HWND hWnd)
    {
    	m_parent=hWnd;
    }
    
    //Ausführen beim Empfangen von Daten
    void CMsgAsyncSock::OnReceive(int nErrorCode)
    {
    	((CWinMsgDlg*)m_parent)->OnReceive(nErrorCode);
    
    	//Dispatchen
    	CAsyncSocket::OnReceive(nErrorCode);
    }
    
    //Ausführen bei eingehender Verbindung
    void CMsgAsyncSock::OnConnect(int nErrorCode)
    {
    	((CWinMsgDlg*)m_parent)->OnConnect(nErrorCode);
    
    	//Dispatchen
    	CAsyncSocket::OnConnect(nErrorCode);
    }
    
    //Ausführen bei Acceptanfrage
    void CMsgAsyncSock::OnAccept(int nErrorCode)
    {
    	((CWinMsgDlg*)m_parent)->OnAccept(nErrorCode);
    
    	//Dispatchen
    	CAsyncSocket::OnAccept(nErrorCode);
    }
    

    Das Problem ist jetzt folgendes:
    Wenn ich jetzt Daten versenden will, ist beim ersten mal scheinbar alles ok.
    Allerdings gibt send komischerweise immer, also unabhängig von dem Zeugs das ich ihm übergebe, 4 zurück. Am Server tut sich auch nichts, beim Debuggen hab ich bemerkt, dass OnReceive anscheinend gar nicht ausgelöst wird.
    Beim zweiten mal ist es jetzt so, dass send -1 zurückgibt und ich beim Server einen error bekomme (Debug Assertion Failure oder sowas, kanns gerade nicht testen).

    Kann mir jemand sagen woran das liegt / was ich falsch gemacht habe?
    Schon mal danke im Voraus.

    mfg aaaabyx



  • Kann mir wirlich niemand helfen?



  • Du könntest mal dein Programm zum Download bereitstellen. Ich schaue mir nicht gerne soviel SOurce hier im Forum an. Da übersieht man auch gerne eine Fehler.





  • sizeof(m_message.GetBuffer()) ist wahrscheinlich immer 4.



  • Danke, damit wär schon mal 1 Problem gelöst.



  • *schieb*



  • wow, der Puffer in OnReceive ist ja richtig groß. ;-))



  • Hm ja ups hehe weiss auch nicht wie ich dadrauf gekommen bin :>

    Is allerdings eher weniger das Problem da OnReceive ja nichtmal aufgerufen wird 😉



  • Kommt schon einer muss mir doch helfen können 🙂



  • Hier wird dir keiner mehr helfen.



  • Wofür ist das Forum denn dann da...



  • Hier kennt sich niemand mit CAsyncSocket aus.



  • Na wenn du meinst, glaub ich aber inzwischen auch schon fast... Obwohl das eigentlich doch gar nicht sein kann...



  • Es gibt auf der Welt nur sehr wenige Menschen die sich mit der CAsyncSocket Klasse auskennen.



  • Nebenbei: Die MFC Socket Klassen werden auch sehr selten verwendet 🙄



  • Nach langer zeit mal wieder da, stimmts Rapha ? 😉



  • Warum sollte ich auch. Ich habe dich ersucht dein Programm hochzuladen.
    Das hast du auch gemacht aber es ist so nicht kompilierbar.

    Warum? Finde es selbst heraus.



  • .°°. schrieb:

    Nach langer zeit mal wieder da, stimmts Rapha ? 😉

    Jo, bin nach nem etwas längeren Abstecher nach PHP, Assembler und c endlich wieder bei C++ gelandet 😃



  • Unix-Tom schrieb:

    Das hast du auch gemacht aber es ist so nicht kompilierbar.

    Entschuldigung ich dachte dafür gibts die Antwort-Funktion. Naja bitte

    http://www.pohl-hamburg.de/WinMsg.zip


Anmelden zum Antworten