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!


Anmelden zum Antworten