Je m'appelle Amélie et je suis en apprentissage.
Je débute en C++ (j'ai suivis en partis le tutorial du site du zéros et d'autres tutoriaux) étant familière en programmation C et ayant un peu fait de java pour la programmation objet j'éssaye de me débrouiller.
Mais j'ai un problème.
J'ai réussis a faire un programme sur les Socket basé sur un client et un server s'envoyant simplement des "Hello". Mais maintenant je veu arriver a envoyer des octets et là je ne sais pas comment faire. je suis perdue.
Il faut savoir que mon programme se basait sur entre autre deux fonctions pour envoyé et recevoir une chaine de caractère: SendLine et ReceiveLine quié tait déclaré dans un header et définiot dans un source a part (c'est de toute façon comme ça que l'on fait dans les languages programmé objet a ce que j'ai compris).
J'aimerais donc tout simplement creer une fonction SendBytes et ReceiveBytes que je pourrais définir et utilisé comme bon me semble mais je n'ai aucune idée sur la gestion des octets.
Normalement tu dois pouvoir le faire avec t'es fonction SendLine et ReceiveLine.
Je ne suis pas sur d'avoir bien comprit ton problème, en gros tu aimerais pouvoir transférer autre chose que des fichier texte ou des chaine de caractère?
Si c bien sa ton problème pour transférer des binaire il te suffit de les ouvrir en mode binaire car pour le transfert c le même principe.
//SENDLINE
void Socket::SendLine(std::string s) {
s += '\n';
send(s_,s.c_str(),s.length(),0);
}
//RECEIVELINE
std::string Socket::ReceiveLine() {
std::string ret;
//Infinite loop
while (1) {
char r;
//switch(variable)
switch(recv(s_, &r, 1, 0)) //Descriptor that identifies a connected
//socket, a pointer to the buffer to receive incomming data (r adress),
//length in bytes of the buffer pointed,a set of flag that influence the
//behavior of this function.
{
case 0: //If recv retiurn 0 the connection is close
// not connected anymore;
// ... but last line sent
// might not end in \n,
// so return ret anyway.
return ret;
case -1://Error managment
return "";
// if (errno == EAGAIN) {
// return ret;
// } else {
// // not connected anymore
// return "";
// }
}
Mon problème est que j'aimerais pouvoir transfer des octets mais je ne sais pas comment les déclarer, les utiliser.
Donc le principe c'est que je peus le faire avec ces fonctions.
Vous n’avez pas trouvé la réponse que vous recherchez ?
une idée :
Attention je n'ai pas testé (case -1 : c'est peut-etre une connerie ce que j'ai fais)et je ne suis pas super balaise en STL, mais si tu gardes les STL, je pense que ceci est possible.
//SENDBYTES
void Socket::SendBytes(std::vector< char > p) {
send(s_,p,p.size(),0);
}
std::vector< char > Socket::ReceiveLine() {
std::vector< char > ret;
//Infinite loop
while (1) {
char r;
//switch(variable)
switch(recv(s_, &r, 1, 0)) //Descriptor that identifies a connected
//socket, a pointer to the buffer to receive incomming data (r adress),
//length in bytes of the buffer pointed,a set of flag that influence the
//behavior of this function.
{
case 0: //If recv retiurn 0 the connection is close
// not connected anymore;
// ... but last line sent
// might not end in \n,
// so return ret anyway.
return ret;
case -1://Error managment
return std::vector< char >NULL;
// if (errno == EAGAIN) {
// return ret;
// } else {
// // not connected anymore
// return "";
// }
}
je ne vois pas quand est affecté le char r avec les vecteurs tu feras : ret.push_back(r);