Bonjour,
J'essaye de transmettre des fichiers avec TCP et je dois donc envoyer des char. Cependant, je n'arrive pas à les extraire.
Voici la fonction qui injecte un fichier dans un paquet (elle sera utilisée côté serveur, je n'ai pas pu la tester étant donné que mon problème fait que mon programme ne compile pas):
bool NetworkManager::AddFileToPacket(sf::Packet &p, string path)
{
//Sources -> http://www.cplusplus.com/reference/cstdio/fread/ & http://en.sfml-dev.org/forums/index.php?topic=4709.0
FILE *pFile;
long size;
pFile = fopen(path.c_str(), "rb");
if (pFile == NULL)
{
fputs("File error", stderr);
return false;
}
//Obtaining file size
fseek(pFile, 0, SEEK_END);
size = ftell(pFile);
rewind(pFile);
//Copying the file into the buffer
vector<char> buffer;
for (int i = 0; i < size; i++)
{
char* ch;
fread(ch, 1, 1, pFile);
buffer.push_back(*ch);
delete ch;
ch = 0;
}
//Injecting the vector into the packet
p << static_cast<sf::Uint32>(buffer.size());
for (vector<char>::const_iterator it = buffer.begin(); it != buffer.end(); it++)
{
p << *it;
}
//Closing the file
fclose(pFile);
return true;
}
Côté client, je dois extraire tout ça sauf que je ne peux pas extraire les chars:
//Extracting the vector from the packet
sf::Uint32 size;
p >> size;
vector<char> buffer;
for (sf::Uint32 i = 0; i < size; i++)
{
char item;
p >> item; //Error: no operator matches these operands. operand types are: sf::Packet >> char
buffer.push_back(item);
}
NetworkManager::Instance().ReconstructFileFromBuffer(buffer, "data/file.txt");
Comme marqué dans les commentaires, l'erreur est la suivante: Error: no operator matches these operands. operand types are: sf::Packet >> char.
Je trouve cela bizarre qu'il soit possible d'injecter un char mais pas de l'extraire.
Merci.