000
18.02.2005, 10:56 Uhr
mstank
|
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.
C++: |
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); }
|
Nun der relevante Code:
C++: |
//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, mein Problem zu lösen?
THX Markus -- Hier spricht die dunkle Seite der Macht! |