J'aurais besoin d'un peu d'aide concernant mon programme. J'essaye de faire communiquer un client avec un serveur avec des sockets. La communication marche bien, mais le problème vient d'une chaine de caractère. Quand j'envoie un premier message, pas de problème. Si j'envoie un deuxième message avec une longueur inférieur au premier message, il garde la fin du message précédent ...
Exemple :
Je voudrais qu'il affiche "Ok" et pas "Oklut".
Voici le code :
Client.c
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
void LireChaine(char[], int);
int main(int argc , char *argv[])
{
int sock;
struct sockaddr_in server;
char message[1000] , server_reply[1000];
//Création de la socket
sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1)
{
printf("Impossible de créer la socket");
}
puts("Socket créée");
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons( 5000 );
//Connexion serveur
if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
{
perror("Connexion impossible");
return 1;
}
puts("Connecté\n");
//Communication avec le serveur
while(1)
{
printf("Entrez votre message : ");
LireChaine(message, 1000);
//Envoyer des messages
if( send(sock , message , strlen(message) , 0) < 0)
{
puts("Erreur Send");
return 1;
}
//Recevoir des messages de la part du serveur
if( recv(sock , server_reply , 1000 , 0) < 0)
{
puts("Erreur recv");
break;
}
puts("Réponse du serveur :");
puts(server_reply);
}
close(sock);
return 0;
}
void LireChaine(char chaine[], int size) {
fgets(chaine, size, stdin);
chaine[strlen(chaine) - 1] = '\0';
}
Votre solution avec strzlen marche. Merci beaucoup !
Je voudrais maintenant faire en sorte que plusieurs clients puissent communiquer dans ce chat. Je sais qu'il faut utiliser les threads, mais comment je pourrais envoyer un message d'un client reçu par le serveur à tous les clients ? Je voudrais aussi gérer les pseudos des clients.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent