overcrash3181
Messages postés1Date d'inscriptionmercredi 21 mai 2008StatutMembreDernière intervention 9 février 2010 9 févr. 2010 à 23:43
Non non le code y est faut Dl le Zip en revanche ce n'est pas du C ?
car ca en C c'est pas possible il me semble :
printf("::::: Client connected\n\n");
int go = 1;
les déclarations de variable se font en début de fichier non?
Si ce n'est pas du C alors pourquoi les fichier sont nommés Client.c
Ce n'est pas une critique j'aimerais juste comprendre donc a ne pas prendre mal ^^
wam777
Messages postés1Date d'inscriptionvendredi 8 mai 2009StatutMembreDernière intervention 8 mai 2009 8 mai 2009 à 13:22
Salut
Je crois que ton code source est vide ... pourrais tu le mettre à jour s'il te plaït ?
Monyisageek
Messages postés18Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention 5 février 2008 19 mars 2008 à 18:21
Hum... j'ai pas fait exprès désolé ....
Monyisageek
Messages postés18Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention 5 février 2008 19 mars 2008 à 18:20
rtfm321
Messages postés15Date d'inscriptionmercredi 23 août 2006StatutMembreDernière intervention20 avril 2008 10 mai 2007 à 17:16
C'est surtout ça :
"PS: petite remarque, il se peut que le server te renvoi le code source de la page en plusieur messages, donc pense a mettre 2 recv avec des variables différentes."
Quand on fait un code il faut prévoir ce genr de comportement ;)
Par exemple on peut faire une fonction exprés pour recevoir tout les trams, que tu apele "tout les messages", comme ceci par exemple:
/* l'envoi ou la reception de donnée ce fait en petit bloques qui s'appel trams,
Par exemple, si la trame maximale fait 1024 octets, et qu'on veut envoyer une
donnée de 2000 octet, alors sera couper en 2blocs (trams) ... */
/******************************************************************************
*
* Permet de recevoir proprement un Bloc de données
* Retourne la taille de data reçu
*
******************************************************************************/
int recoi_data ( SOCKET socket, char *data )
{
size_t len_data;
size_t data_receved = 0;
char len_data_buffer[10];
/* recevoir la taille de data */
int n = recv (socket, len_data_buffer, sizeof len_data_buffer - 1, 0);
if (n == SOCKET_ERROR)
return SOCKET_ERROR;
/* envoi de la taille de data, comme etant une chaine */
int n = send (socket, len_data_buffer, strlen(len_data_buffer), 0);
if (n == SOCKET_ERROR)
return SOCKET_ERROR;
/* envoi du reste, (s'il y a du reste) */
while (data_sent != len_data)
{
n = send (socket, data + data_sent, len_data - data_sent, 0);
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 10 mai 2007 à 08:47
Si tu dis que sa craint je pense qu'il serait pertinent de dire pourquoi, ça ne sert a rien de critiquer sans préciser ce qui nous déplait.
De plus une source peut toujours être améliorée.
rtfm321
Messages postés15Date d'inscriptionmercredi 23 août 2006StatutMembreDernière intervention20 avril 2008 9 mai 2007 à 17:04
ça crain un peut ton code source... baby3378
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 3 oct. 2006 à 19:54
c'est tellement simple que je doute qu'il y est besoin d'une source, avec ton programme de chat (client) tu trouve l'adresse ip du site sur lequel tu veux aller, puis le port est 80 (http). Aprés la connection tu envoi un message (requette http du genre :
char canal[] = "GET http://sertuk9.100webspace.net/testip.php HTTP/1.0\n\n";
/*requette de la page*/
ofstream log;
log.open("fichier.txt"); // fichier pour enregistrer les données reçues.
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr("64.72.112.133"); //adresse ip du site
sin.sin_family = AF_INET;
sin.sin_port = htons(80); // port HTTP.
connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
if (i != 0) // si le buffer reçoit des données.
{
log << buffer << "\n";
cout <<"contenut de reception : \n";
cout << buffer <<"|\n";
system("pause");
log.close();
// enregistrement des données dans le fichier.
}
if (i == 0)
{
log << "aucune donné n'est parvenue\ndsl\a";
cout <<"\n\apas de réponce\n";
system("pause");
log.close();
}
closesocket(sock); // on ferme le socket.
WSACleanup();
return 0;
}
PS: petite remarque, il se peut que le server te renvoi le code source de la page en plusieur messages, donc pense a mettre 2 recv avec des variables différentes.
Tenez moi au courant de vos remarques et/ou suggestions ;-)
rtfm321
Messages postés15Date d'inscriptionmercredi 23 août 2006StatutMembreDernière intervention20 avril 2008 2 oct. 2006 à 19:18
Resalut.
baby3378 ta pas un code source qui explique comment faire, j'ai chercher sur le site et j'ai pas trouvé.
Merci.
@shawtyunit : oui c posible de linké avec dev-cpp chérche la lib libwinsock .
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 1 oct. 2006 à 17:38
avec dev c'est dans les options du projet, puis parametre, puis tu ajoute libwinsock (il doit se trouver dans le dossier 'lib') dans le dossier du compilo.
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 29 sept. 2006 à 10:59
slt, dsl je n'ai pu venir plus tôt sur le site.
Pour ta question, je suis entrain d'écrir la solution.
Voici mon résonement:
Il suffit de faire (sur un site) une page en php qui enregistre l'adresse ip de quiconque se connecte dessus dans un fichier txt.
Ensuite je fait faire une requette http par mon prog server sur cette page (ainsi mon adresse ip est enregistrée).
du coté du programme client je fait faire une requette http sur le ficheir texte contenant a present l'adresse, puis je le fait connecter sur celle ci.
Et voila, pas besoin de rentrer l'ip.
->long a expliquer mais normalement rapide a appliquer.
Qu'en penser vous ?
shawtyunit
Messages postés1Date d'inscriptionjeudi 28 septembre 2006StatutMembreDernière intervention28 septembre 2006 28 sept. 2006 à 17:46
est-il possible de linker avec dev-cpp et si oui comment ?
rtfm321
Messages postés15Date d'inscriptionmercredi 23 août 2006StatutMembreDernière intervention20 avril 2008 12 sept. 2006 à 16:20
Salut BABY3378, j'aimer bien savoire comment faire sans avoire besoin de l'ip .
Merci
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 11 sept. 2006 à 19:12
je pense aussi a une passerelle, plus pratique, pas besoin de controler l'ip ... .
Sinon c'est un bon exemple pour la prog sur les sockets ;-)
cs_thedestiny
Messages postés56Date d'inscriptionsamedi 3 juillet 2004StatutMembreDernière intervention30 juin 2008 11 sept. 2006 à 16:31
Certes c'est très simple, mais à mon avis, il aurait été peut-être 'un peu plus' interréssant de créer des threads afin de rendre l'émission et la réception de messages moins casse-pieds ;)
rtfm321
Messages postés15Date d'inscriptionmercredi 23 août 2006StatutMembreDernière intervention20 avril 2008 11 sept. 2006 à 14:53
9 févr. 2010 à 23:43
car ca en C c'est pas possible il me semble :
printf("::::: Client connected\n\n");
int go = 1;
les déclarations de variable se font en début de fichier non?
Si ce n'est pas du C alors pourquoi les fichier sont nommés Client.c
Ce n'est pas une critique j'aimerais juste comprendre donc a ne pas prendre mal ^^
8 mai 2009 à 13:22
Je crois que ton code source est vide ... pourrais tu le mettre à jour s'il te plaït ?
19 mars 2008 à 18:21
19 mars 2008 à 18:20
10 mai 2007 à 17:16
"PS: petite remarque, il se peut que le server te renvoi le code source de la page en plusieur messages, donc pense a mettre 2 recv avec des variables différentes."
Quand on fait un code il faut prévoir ce genr de comportement ;)
Par exemple on peut faire une fonction exprés pour recevoir tout les trams, que tu apele "tout les messages", comme ceci par exemple:
/* l'envoi ou la reception de donnée ce fait en petit bloques qui s'appel trams,
Par exemple, si la trame maximale fait 1024 octets, et qu'on veut envoyer une
donnée de 2000 octet, alors sera couper en 2blocs (trams) ... */
/******************************************************************************
*
* Permet de recevoir proprement un Bloc de données
* Retourne la taille de data reçu
*
******************************************************************************/
int recoi_data ( SOCKET socket, char *data )
{
size_t len_data;
size_t data_receved = 0;
char len_data_buffer[10];
/* recevoir la taille de data */
int n = recv (socket, len_data_buffer, sizeof len_data_buffer - 1, 0);
if (n == SOCKET_ERROR)
return SOCKET_ERROR;
len_data_buffer[n] = '\0';
len_data = atoi(len_data_buffer);
while (data_receved != len_data)
{
int n = recv (socket, data + data_receved, sizeof data - 1, 0);
if (n >= 0)
data_receved += n;
else return SOCKET_ERROR;
}
return ((int)data_receved);
}
Et la fonction d'envoi correspandante:
/******************************************************************************
*
* Permet d'envoyer proprement un Bloc de données.
* Retourne la taille de donnée envoyer
*
******************************************************************************/
int envoi_data ( SOCKET socket, char *data )
{
size_t const len_data = strlen (data);
size_t data_sent = 0;
char len_data_buffer[10];
sprintf(len_data_buffer, "%d", len_data);
/* envoi de la taille de data, comme etant une chaine */
int n = send (socket, len_data_buffer, strlen(len_data_buffer), 0);
if (n == SOCKET_ERROR)
return SOCKET_ERROR;
/* envoi du reste, (s'il y a du reste) */
while (data_sent != len_data)
{
n = send (socket, data + data_sent, len_data - data_sent, 0);
if (n >= 0)
data_sent += n;
else return SOCKET_ERROR;
}
return ((int)data_sent);
}
J'ai mis un autre code source simple qui utilise ces fonction ici:
http://www.cppfrance.com/codes/SOCKET-CLIENT-SERVEUR_42385.aspx
;)
10 mai 2007 à 08:47
De plus une source peut toujours être améliorée.
9 mai 2007 à 17:04
3 oct. 2006 à 19:54
GET http://sertuk9.100webspace.net/testip.php HTTP/1.0\n\n
puis tu fait ton recepteur : recv(sock, buffer, sizeof(buffer), 0);
tu recupérera dans ton buffer le code source du site sur lequel tu vient de te connecter, comme si c'était ton internet explorer qui le faisait.
voci un exemple de source :
#include<fstream.h>
#include
#include<winsock.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char buffer[100000];
memset(buffer,0,sizeof(buffer));//nétoyage ;-)
char canal[] = "GET http://sertuk9.100webspace.net/testip.php HTTP/1.0\n\n";
/*requette de la page*/
ofstream log;
log.open("fichier.txt"); // fichier pour enregistrer les données reçues.
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr("64.72.112.133"); //adresse ip du site
sin.sin_family = AF_INET;
sin.sin_port = htons(80); // port HTTP.
connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
if (i != 0) // si le buffer reçoit des données.
{
log << buffer << "\n";
cout <<"contenut de reception : \n";
cout << buffer <<"|\n";
system("pause");
log.close();
// enregistrement des données dans le fichier.
}
if (i == 0)
{
log << "aucune donné n'est parvenue\ndsl\a";
cout <<"\n\apas de réponce\n";
system("pause");
log.close();
}
closesocket(sock); // on ferme le socket.
WSACleanup();
return 0;
}
PS: petite remarque, il se peut que le server te renvoi le code source de la page en plusieur messages, donc pense a mettre 2 recv avec des variables différentes.
Tenez moi au courant de vos remarques et/ou suggestions ;-)
2 oct. 2006 à 19:18
baby3378 ta pas un code source qui explique comment faire, j'ai chercher sur le site et j'ai pas trouvé.
Merci.
@shawtyunit : oui c posible de linké avec dev-cpp chérche la lib libwinsock .
1 oct. 2006 à 17:38
29 sept. 2006 à 10:59
Pour ta question, je suis entrain d'écrir la solution.
Voici mon résonement:
Il suffit de faire (sur un site) une page en php qui enregistre l'adresse ip de quiconque se connecte dessus dans un fichier txt.
Ensuite je fait faire une requette http par mon prog server sur cette page (ainsi mon adresse ip est enregistrée).
du coté du programme client je fait faire une requette http sur le ficheir texte contenant a present l'adresse, puis je le fait connecter sur celle ci.
Et voila, pas besoin de rentrer l'ip.
->long a expliquer mais normalement rapide a appliquer.
Qu'en penser vous ?
28 sept. 2006 à 17:46
12 sept. 2006 à 16:20
Merci
11 sept. 2006 à 19:12
Sinon c'est un bon exemple pour la prog sur les sockets ;-)
11 sept. 2006 à 16:31
11 sept. 2006 à 14:53