Probleme de transfert avec une application mfc - C++ - Programmation
MarshPosté le 19-04-2006 à 17:12:37
Bonjour,
Je développe acuellement une application MFC (exe) pour me permettre d'envoyer un fichier d'un PC à un autre en utilisant une connexion ethernet. Ainsi, j'ai deux codes sources (le serveur et le client)
Application serveur : void CProgressDlg::OnButton11() { #define PORT 200 /// Select any free port you wish
AfxSocketInit(NULL); CSocket sockSrvr; sockSrvr.Create(PORT); // Creates our server socket sockSrvr.Listen(); // Start listening for the client at PORT CSocket sockRecv; sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
CFile myFile; myFile.Open("C:\\Bulles de savon.bmp",CFile::modeRead | CFile::typeBinary);
int myFileLength = myFile.GetLength(); // Going to send the correct File Size
sockRecv.Send(&myFileLength, 100); // 4 bytes long
byte* data = new byte[myFileLength];
myFile.Read(data, myFileLength);
sockRecv.Send(data, myFileLength); //Send the whole thing now
myFile.Close(); delete data;
sockRecv.Close();
}
Application client : void CClientDlg::OnButton1() { #define PORT 200 /// Select any free port you wish
AfxSocketInit(NULL); CSocket sockClient; sockClient.Create(); sockClient.Connect("127.0.0.1", PORT); // "127.0.0.1" is the IP to your server, same port
int dataLength; sockClient.Receive(&dataLength, 100); //Now we get the File Size first
byte* data = new byte[dataLength]; sockClient.Receive(data, dataLength); //Get the whole thing
CFile destFile("C:\\ Bulles de savon", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
destFile.Write(data, dataLength); // Write it
destFile.Close();
delete data; sockClient.Close();
}
Une fois tous ceci compilé j'insere mon application client sur un PC et l'application serveur dans un autre. J'ouvre ensuite l'application serveur puis j'appuis sur le bouton pour débuter le transfert. J'ouvre ensuite l'application client afin de recevoir ce fichier.
Mais j'ai quelques probleme tous d'abord : Mon application serveur ne se ferme plus. Je recoit bien un fichier sur mon ordinateur client mais celui est composé que de "0" (si on l'ouvre avec WinHex) et de plus sa taille est de 3.07 Mo alors que l'orignale ne fait que 65Kb.
Savez vous d'ou provient l'ensemble de ces problemes ?
Marsh Posté le 19-04-2006 à 17:12:37
Bonjour,
Je développe acuellement une application MFC (exe) pour me permettre d'envoyer un fichier d'un PC à un autre en utilisant une connexion ethernet.
Ainsi, j'ai deux codes sources (le serveur et le client)
Application serveur :
void CProgressDlg::OnButton11()
{
#define PORT 200 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT); // Creates our server socket
sockSrvr.Listen(); // Start listening for the client at PORT
CSocket sockRecv;
sockSrvr.Accept(sockRecv); // Use another CSocket to accept the
connection
CFile myFile;
myFile.Open("C:\\Bulles de savon.bmp",CFile::modeRead |
CFile::typeBinary);
int myFileLength = myFile.GetLength(); // Going to send the correct
File Size
sockRecv.Send(&myFileLength, 100); // 4 bytes long
byte* data = new byte[myFileLength];
myFile.Read(data, myFileLength);
sockRecv.Send(data, myFileLength); //Send the whole thing now
myFile.Close();
delete data;
sockRecv.Close();
}
Application client :
void CClientDlg::OnButton1()
{
#define PORT 200 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockClient;
sockClient.Create();
sockClient.Connect("127.0.0.1", PORT); // "127.0.0.1" is the
IP to your server, same port
int dataLength;
sockClient.Receive(&dataLength, 100); //Now we get the File Size first
byte* data = new byte[dataLength];
sockClient.Receive(data, dataLength); //Get the whole thing
CFile destFile("C:\\ Bulles de savon", CFile::modeCreate |
CFile::modeWrite | CFile::typeBinary);
destFile.Write(data, dataLength); // Write it
destFile.Close();
delete data;
sockClient.Close();
}
Une fois tous ceci compilé j'insere mon application client sur un PC et l'application serveur dans un autre.
J'ouvre ensuite l'application serveur puis j'appuis sur le bouton pour débuter le transfert.
J'ouvre ensuite l'application client afin de recevoir ce fichier.
Mais j'ai quelques probleme tous d'abord :
Mon application serveur ne se ferme plus.
Je recoit bien un fichier sur mon ordinateur client mais celui est composé que de "0" (si on l'ouvre avec WinHex) et de plus sa taille est de 3.07 Mo alors que l'orignale ne fait que 65Kb.
Savez vous d'ou provient l'ensemble de ces problemes ?
Merci