Server / CLient [Daten Transfer]
-
Hallo,
ich wollte euch mal fragen was an dem Code falsch ist, im netzwerk oder local hat er richtig funktioniert aber über Internet kriege ich fehlerhafte Datein
so wie das hier z.B.:
<img src="www.cppcoding.de/hase.jpg" height=480 width=360>
Hier ist der Code vom Server:
UINT SendFile(LPVOID lparam) { CSvhostDlg* m_dlg = (CSvhostDlg*)lparam; //CProgressCtrl *status = (CProgressCtrl *) GetDlgItem(IDC_STATUS); CFile Read; if(!Read.Open(sFileName, CFile::modeRead)) { AfxMessageBox("Fehler Datei kann nicht gelesen werden!"); } else { CString strTemp; int nCount; static const int BUFFERSIZE = 1024; //32 KB/s 4096 * 1/8s = 32 KB/s char buffer[BUFFERSIZE]; try { nCount = Read.Read (buffer, BUFFERSIZE); buffer[nCount]=NULL; while (nCount > 0) { //buffer Schicken int nResult = m_ClientSocket[SendToUser].Send(buffer, nCount); if(SOCKET_ERROR == nResult) { return 0; } else { } nCount = Read.Read (buffer, BUFFERSIZE); buffer[nCount]=NULL; Sleep(125); } Read.Close(); } catch (CFileException *e) { e->ReportError (); e->Delete (); } delete buffer; Sleep(5); CString sTemp = "CLOSE"; int nSize = sTemp.GetLength(); int nResult = m_ClientSocket[SendToUser].Send(LPCTSTR(sTemp), nSize); if(SOCKET_ERROR == nResult) { AfxMessageBox("Fehler beim schicken vom Close befehl"); } else { } } return 0; }
Und Hier vom Client:
void CXLeechDlg::OnReceive() { UpdateData(true); char pText[Speed]; int nResult = m_ServerSocket.Receive(pText, Speed); CString strTemp; if(SOCKET_ERROR == nResult) { MessageBox("FEHLER: Beim Empfangen"); } else { pText[nResult] = NULL; strTemp = pText; if(strTemp.Left(4) == "DRVE") { AddDrives(strTemp.Mid(5)); } else if(strTemp.Left(3) == "DIR") { AddDir(strTemp.Mid(4)); } else if(strTemp.Left(8) == "INCOMING") { SetDlgItemText(IDC_STATUSTEXT, "File Incomming!"); ready4File = true; } else if(strTemp.Left(5) == "CLOSE") { SetDlgItemText(IDC_STATUSTEXT, "File closed!"); ready4File = false; flIncoming.Close(); DoneSize = 0; } else { if(!ready4File) { } else { //Datei schreiben DoneSize += Speed / 1024; CString strStatus; strStatus.Format("%d / %d KB", DoneSize, FileSize); SetDlgItemText(IDC_STATUSTEXT, strStatus); flIncoming.Write (pText, Speed); m_prStatus.SetPos(DoneSize); } } } }
Ich vermute das liegt an dem Buffer, naja ich hoffe ihr könnt mir helfen!
-
Bitte hilft mir, brauche das echt dringend!