Probleme client serveur

romanzo_cirminale -  
 romanzo_cirminale -
Bonjour,

J'ai code un serveur en c++ et j'utilise le navigateur web firefox comme client.
J'au prealable code ma page web en javascript.
Lorsque j'execute une action sur cette page web j'envoie une requete a mon serveur, qui la recoit parfaitement.
Mon probleme se situe dans l'envoi des donnees du serveur au client, pour envoyer les donnees j'ultilise la fonction send() et je sais que si j'avais code un client en c++ j'aurais utilise la fonction recv(). Mais vu que j'utilise le navigateur web comme client, comment recuperer les donnees? si j'envoie une chaine de caractere doit-elle directement s'afficher sur ma page web?

Voici mon serveur
Code : C++

int main(int argc, char** argv)
{
GetRGBValue2();
std::cout << "Slice Server Start\n******************\n" << std::endl;
pthread_mutex_init(&m_SocketMutex, NULL);

// Create Basic Data
int sockfd, on;
struct sockaddr_in self;
char buffer[BUFSIZE];

// Create a socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);

// Setup the socket
bzero(&self, sizeof(self));
self.sin_family = AF_INET;
self.sin_port = htons(SVRPORT);
self.sin_addr.s_addr = INADDR_ANY;

// Allow address re-use so that bind has a better cnance
on = 1;
setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );

// Give our little socket a number
if(bind(sockfd, (struct sockaddr*)&self, sizeof(self)) == -1)
{
std::cout << "ERROR: Socket bind failed" << std::endl;
}

// Make it a server
listen(sockfd, 20);

// Loop the server for eternity
while (1)
{
struct sockaddr_in client_addr;
socklen_t addrlen=sizeof(client_addr);

// Accept connections
pthread_mutex_lock(&m_SocketMutex);
m_Clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
pthread_mutex_unlock(&m_SocketMutex);

std::cout << inet_ntoa(client_addr.sin_addr) << ":" <<
ntohs(client_addr.sin_port) << " Connected" << std::endl;

// Receive the data
int msg_size = recv(m_Clientfd, buffer, BUFSIZE, 0);

// Print data
buffer[msg_size] = '\0';

// Process data
char request[255];
char http_ver[255];
sscanf(buffer,"GET %s %s",&request,&http_ver);
cout<<"buffer: "<<buffer<<endl;
std::cout << request << " " << http_ver << std::endl;
std::vector<std::string> tokens;
std::string str(request);
// This does sends reply
ParseGet(request,m_Clientfd);

// Disconnect the client. He's had enough
close(m_Clientfd);
}
} // end main

et voici ma fonction d'envoie des donnees
Code : C++

void ParseGet(std::vector<std::string> request, int clientfd)
{
// j'ai enleve le debut de ma fonction pour ne garder que la partie liee a mon probleme
std::string message = "HTTP/1.0 200 OK\r\nServer: MidasSliceServer\r\nContent-Type: text/html\r\nConnection: close\r\n\r\n";
message+="super ca marche!";
std::cout<<message<<endl;
send(m_Clientfd, message.c_str(), message.size(), MSG_NOSIGNAL);
send(m_Clientfd, "\r\n\r\n", 4, MSG_NOSIGNAL);

}

Donc pour recapitulez dans un premier temps, comment afficher "super ca amrche sur ma page web"
dans un deuxieme temps j'aurais voulue envoiyez ceci comme message au client:
Code : C++

message += "<?php\n\n";
message += "$name = ";
message +="Jean-Claude";
message += "?>";

Et recuperer ces donnees sur ma page web que je coderais alors en php. Est- ce possible?

Merci!
A voir également:

23 réponses

Nabla's Messages postés 20731 Statut Contributeur 3 194
 
désolé, j'ai pas eu le temps de regarder... bon, j'essayerai de faire ca se week end...
0
romanzo_cirminale
 
Ok c'est cool merci, visiblement ca ne peut pas marcher a cause de mon code javascript, puisque j'envoie la requete au serveur l'URL d'une image.
Mais bonj'avoie que je ne sais pas trop comment faire.

Car finalement ce que je voulais reellement faire c'est envoyant un nom (de muscle) du serveur au client, que je recupere et que je peux afficher sur ma page.
0
Nabla's Messages postés 20731 Statut Contributeur 3 194
 
malheuseusement je n'arrives pas à compiler avec visual studio 6. Je sais pas si c'est dezs librairies absentes ou quoi....

chez moi j'ai fait ce code (celui que je t'ai donné sur le site cppfrance:

#include "afxsock.h"
#include "afxmt.h"
#define PORT 80

#define MESSAGE "HTTP/1.1 200 OK\r\nContent-length: 32\r\nConnection: close\r\n\r\n<html><body>coucou</body></html>"
Wsocket->Send(MESSAGE,strlen(MESSAGE));

et ca fonctionne... .(j'ai passé un peu la partie serveur de sockets, c'est celle du lien donné plus haut, j'ai juste modifié le message à envoyer)
0
romanzo_cirminale
 
Le probleme c'est que moi j'envoie une requete a mon serveur avec l'URL d'une image. Est ce que tu penses que c apeut etre ca le pb?
0
Nabla's Messages postés 20731 Statut Contributeur 3 194
 
ben tests déja en demandant l'url d'une page, et tests le code...

une fois que ton code fonctionenra, tu passeras à l'image
0
romanzo_cirminale
 
La requete avec l'url de l'image marche parfaitement, puisque j'arrive a afficher mes images sur ma page web. Ce que je veux faire maintenant c'est juste envoyer une information conne un nom de muscle du serveur a la page web et l'afficher.
0