Zeichenketten werden nicht untereinander ausgegeben
-
Hi @ all!
Für den Netzwerkzugriff habe ich die Klasse MySocket in einer dialogbasierten Anwendung. Die Dialogklasse heißt CStarDustUDPDlg. Die Methode OnReceive liefert mir die empfangenen Inhalte der UDP-Pakete.
Diese werden immer in der Variablen m_strReceive angehangen. Ich möchte aber, daß nur der letzte übertragene Datensatz in der Variablen steht, damit ich ihn in ein StringArray schreiben kann.
Bisher hatte ich entweder kein Erfolg oder aber der Inhalt der Variable wurde gelöscht und mit wurde nichts angezeigt.
Anmerkung: In der Editbox stehen sie untereinander. Aber im gespeicherten File immer hintereinander.
Hier der Code:
void CMySocket::OnReceive(int nErrorCode) { OutputDebugString("CMySocket::OnReceive\n"); TCHAR buff[70000]; int nRead; ((CStarDustUDPDlg*)m_pDlg)->UpdateData(TRUE); //Abfragen der Portadresse und der IP-Adresse nRead = ReceiveFrom(buff, 69999, ((CStarDustUDPDlg*)m_pDlg)->m_strRemote, ((CStarDustUDPDlg*)m_pDlg)->m_remoteport); //make it smaller so we can experiment mulitple notifications //Verzweigung für Fehlerbehandlung switch (nRead) { case 0: Close(); break; case SOCKET_ERROR: if (GetLastError() != WSAEWOULDBLOCK) { if (GetLastError() != WSAEMSGSIZE) { TCHAR szError[256]; wsprintf(szError, "OnReceive error: %d", GetLastError()); AfxMessageBox (szError); } else { AfxMessageBox ("Der Datensatz war zu lang und wurde abgeschnitten!"); CString szTemp(buff); ((CStarDustUDPDlg*)m_pDlg)->m_strReceive += szTemp; ((CStarDustUDPDlg*)m_pDlg)->UpdateData(FALSE); } } break; //Wenn keine Fehler aufgetreten sind, dann Ausgabe default: if (nRead != SOCKET_ERROR && nRead != 0 ) { TCHAR szError[256]; wsprintf(szError, "OnReceive bytes: %d", nRead); buff[nRead] = 0; //terminate the string CString szTemp(buff); ((CStarDustUDPDlg*)m_pDlg)->m_strReceive += szTemp; ((CStarDustUDPDlg*)m_pDlg)->UpdateData(FALSE); } } CAsyncSocket::OnReceive(nErrorCode); }
Der entsprechende Bereich befindet sich hier:
//Wenn keine Fehler aufgetreten sind, dann Ausgabe default: if (nRead != SOCKET_ERROR && nRead != 0 ) { TCHAR szError[256]; wsprintf(szError, "OnReceive bytes: %d", nRead); buff[nRead] = 0; //terminate the string CString szTemp(buff); ((CStarDustUDPDlg*)m_pDlg)->m_strReceive += szTemp; ((CStarDustUDPDlg*)m_pDlg)->UpdateData(FALSE); } } CAsyncSocket::OnReceive(nErrorCode); }
Wer kann mir helfen?
THX Markus
-
((CStarDustUDPDlg*)m_pDlg)->m_strReceive += szTemp
denke mal m_strReceive ist vom Typ CString. Mit += hängst du immer was an. Wenn die Variable nur den letzten String enthalten soll musst du nur = nehmen