Salut à tous ! J'ai finalement décidé de progresser avec les sockets en C (le début du tuto était vraiment lent et ennuyant mais j'ai finalement percé )
J'ai donc décidé de faire un mini chat ! (j'ai vu qu'il y avait un sujet dessus mais le code était vraiment différent et beaucoup plus compliqué :s
Bref, j'ai fait en sorte d'être le plus clair parce que lire et corriger un code concernant les sockets n'est JAMAIS amusant ou facile !
Côté serveur !
Bon, ce code est plutôt simple, je l'ai simplifié au maximum !
Côté client !
voila a quoi ressemble un echange.
Capture.jpg
Ce serait vraiment génial si quelqu'un pourrait me dire quel est le problème !
J'ai donc décidé de faire un mini chat ! (j'ai vu qu'il y avait un sujet dessus mais le code était vraiment différent et beaucoup plus compliqué :s
Bref, j'ai fait en sorte d'être le plus clair parce que lire et corriger un code concernant les sockets n'est JAMAIS amusant ou facile !
Côté serveur !
Code:
int main (void) { // Je déclare mes variables ! SOCKET Masock; SOCKADDR_IN Monaddresse; SOCKET clientsock; SOCKADDR_IN clientaddresse; char message[200] = "Connexion etablie !!!"; char clientmessage[200]=""; int taille=sizeof(Monaddresse); int tailleclient = sizeof(clientaddresse); int erreur=0; int i=1; // fin de la déclaration ! Masock = socket(AF_INET, SOCK_STREAM, 0); //création de la socket if(Masock != INVALID_SOCKET) { //configuration de la socket Monaddresse.sin_addr.s_addr = htonl(INADDR_ANY); Monaddresse.sin_family = AF_INET; Monaddresse.sin_port = htons(23); erreur= bind(Masock, (SOCKADDR*)&Monaddresse,taille); //fini ! if(erreur!= SOCKET_ERROR) { erreur= listen(Masock, 5); if(erreur!= SOCKET_ERROR) { // on attends que quelqu'un se connecte :p clientsock = accept(Masock, (SOCKADDR*)&clientaddresse, &tailleclient); // quelqu'un s'est connecté ! :D if(erreur!= SOCKET_ERROR) { while(i) { send(clientsock, message, 200, 0); //j'envoie le message: "connexion établie !" printf("Chaine envoyee : %s\n\n", message); lire(message,200); //un simple gets amélioré (je demande ce que je veux envoyer au client ensuite) /* je ne peux recevoir un message qu'après en avoir envoyé un, mais ce n'est pas le problème pour le moment*/ if(recv(Masock, clientmessage, 200, 0) != SOCKET_ERROR) { printf("Recu : %s \n",clientmessage); } }
Côté client !
Code:
int main(void) { //déclaration des variables ! int i=1; SOCKET serversock; SOCKADDR_IN serveraddr; SOCKET Masock; SOCKADDR_IN Masin; char buffer[200] = ""; char message[200]="connexion etablie avec le serveur"; // fin de la déclaration des variables sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); sin.sin_family = AF_INET; sin.sin_port = htons(PORT); // pas de bind car c'est le client :p if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR) // on essaye de se connecter ! { while(i) { if(recv(sock, buffer, 200, 0) != SOCKET_ERROR) { printf("Recu : %s \n", buffer); // on affiche ce que l'on reçoit } erreur= send(serversock, message, 200, 0); //l'erreur est ici je suppose. if(erreur)/*La fonction retourne SOCKET_ERROR en cas d'erreur, sinon elle retourne le nombre d'octets envoyés.*/ { printf("NOMBRE D OCTET ENVOYES: %d\n",erreur); } printf("Chaine envoyee : %s\n\n", message); // on montre ce qu'on a envoyé. lire(message,200); // on demande ce que l'utilisateur veut envoyer. } }
Capture.jpg
Ce serait vraiment génial si quelqu'un pourrait me dire quel est le problème !
Commentaire