Text senden



  • Hallo
    Ich habe ein Clientprogramm, das eingegebene Informationen wie z.b. ein Name in einer Textdatei speichert. Ich möchte nun diese Textdatei an mein Serverprogramm senden und dort soll es wieder angezeigt werden.
    Das Senden der Informationen in der Textdatei stellt kein Problem da. Habe es auch schon mit dem Prgramm aus dem Buch: Visual C++. net in 21 Tagen getestet. Die Daten werden da empfangen und im Listfeld angezeigt.
    Doch bei meinem Serverprogramm funktioniert es nicht. Ich versuche auch hier die zu empfangenen Texte anzunehmen und dann in Editboxen anzuzeigen. (Die Basisklasse des Programms ist CFormView)
    Hier ist der Code den ich in TestAdoView geändert und hinzu gefügt habe (ich hoffe ihr könnt mir helfen, solltet ihr noch andere Infos benötigen schreibt einfach):

    void CTestAdoView::OnInitialUpdate()   // Änderungen vorgenommen
    {
    	// Server, an den angegebenen Port gebundenen Socket erzeugen 
    	m_sListenSocket.Create(4000);
    	// Auf Verbindungsgesuche lauschen
    	m_sListenSocket.Listen();
    
    	// Daten empfangen
    	OnReceive();
    
    	CFormView::OnInitialUpdate();
    	GetParentFrame()->RecalcLayout();
    	ResizeParentToFit();
    }
    
    // CTestAdoView Meldungshandler
    
    // Code hinzugefügt,der die gesendeten Texte empfangen und in den EditBoxen anzeigen soll
    
    void CTestAdoView::OnReceive(void)	// Hier denke ich muss etwas falsch sein
    {
    	char *pBuf = new char[1025];
    	int iBufSize = 1024;
    	int iRcvd;
    	CString strRecvd;
    
    	// Nachricht empfangen
    	iRcvd = m_sConnectSocket.Receive(pBuf, iBufSize);
    	// Haben wir etwas empfangen?
    	if (iRcvd == SOCKET_ERROR)
    	{
    	}
    	else
    	{
    
    		CEdit* pStartEdit = (CEdit*) GetDlgItem(IDC_EDIT1); //Zeiger auf erste EditBox 
    		CEdit* pEndEdit=(CEdit*)GetDlgItem(IDC_EDIT2);//Zeiger auf lezte EditBox 
    		int startID = pStartEdit->GetDlgCtrlID(); 
    		int endID   = pEndEdit->GetDlgCtrlID();
    
    		for (int i = startID; i<= endID; i++)	// Der erste empfangene Text soll in IDC_Edit1 angezeigt werden und der zweite Text in IDC_Edit2
    			{ 
    				// Ende der Nachricht abschneiden
    				pBuf[iRcvd] = '\0';
    				// Nachricht in einen CString kopieren
    				strRecvd = pBuf;
    
                    CEdit* pEdit = (CEdit*) GetDlgItem(i); 
    				if (pEdit)
    				pEdit->SetWindowText(strRecvd);
    
    			}
    
    	}
    }
    


  • Ich komme einfach nicht weiter.
    Bitte helft mir



  • Hallo
    ich glaube ich weiss wo mein Fehler ist.
    Ich habe onRecieve noch nicht überschrieben. Das muss ich doch oder nicht?
    Bei Visual c++ in 21 Tagen machen sie es. Aber da ist es eine dialogbasierte Anwendung und bei mir eine SDI. Muss ich sie trotzdem überschreiben?
    Wenn ja wie würde die Überschriebene Funktion aussehen? Hier so weit bin ich:

    void CMySocket::OnReceive(int nErrorCode)
    {
    	// TODO: Fügen Sie hier Ihren spezialisierten Code ein, und/oder rufen Sie die Basisklasse auf.
    
    	if (nErrorCode == 0)
    		// Die OnReceive-Funktion von CAdoDatabaseView aufrufen
    
    		// wie ?
    
    	CAsyncSocket::OnReceive(nErrorCode);
    }
    


  • Hat nichts mit SDI oder DLG zu tun. Mach es wie im Buch und es wird funktionieren.



  • Genau da liegt mein Problem Unix-Tom.
    Ich habe es so wie im Buch gemacht. Also so:

    void CMySocket::OnReceive(int nErrorCode)
    {
    	// TODO: Fügen Sie hier Ihren spezialisierten Code ein, und/oder rufen Sie die Basisklasse auf.
     // Sind Fehler aufgetreten?
      if (nErrorCode == 0)
        // Nein, die OnAccept-Funktion des Dialogfelds aufrufen
        ((CSockDlg*)m_pWnd)->OnReceive();
    
    	CAsyncSocket::OnReceive(nErrorCode);
    }
    

    Doch da ich keine dialogbasierte Anwendung sondern ein SDI Anwendung habe klappt das so mit CSockDlg* nicht.
    Was muss ich also anstellen von ((CSockDlg*)m_pWnd)->OnRecieve(); schreiben?


Anmelden zum Antworten