Zeichenketten stehen hintereinander

mstank

Mitglied
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.
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);
}

Hier der relevante Code:
Code:
 //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 da weiterhelfen?

THX Markus
 
hi
ändere mal:
Code:
((CStarDustUDPDlg*)m_pDlg)->m_strReceive += szTemp;

in:
Code:
((CStarDustUDPDlg*)m_pDlg)->m_strReceive = szTemp;

Ich hoffe ich konnte helfen.
Mfg
 
Zurück