Probleme client serveur
romanzo_cirminale
-
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!
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:
- Probleme client serveur
- Cybera client - Télécharger - Divers Réseau & Wi-Fi
- Changer serveur dns - Guide
- Filezilla client - Télécharger - Téléchargement & Transfert
- Formate pour taxer client 500€ - Forum PDF
- Numéro service client orange - Guide
23 réponses
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)
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)
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.