baptchr55
Messages postés34Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 6 avril 2011
-
28 janv. 2011 à 09:02
baptchr55
Messages postés34Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 6 avril 2011
-
31 janv. 2011 à 19:40
Bonjour à tous encore une fois j'ai besoin de votre aide.
J'essaye d'envoyer par le biais d'un socket une chaine de caractères. Ce qui fonctionne, seul problème, si elle est composée d'un espace la ligne transmise ressemble à ça :
/* Si la socket fonctionne */
if(sock_err != SOCKET_ERROR)
{
/* Démarrage du listage (mode server) */
sock_err = listen(sock, 5);
printf("Listage du port %d...\n", PORT);
/* Si la socket fonctionne */
if(sock_err != SOCKET_ERROR)
{
/* Attente pendant laquelle le client se connecte */
printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
csock = accept(sock, (SOCKADDR*)&csin, &recsize);
printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
/* Si les sockets Windows fonctionnent */
if(!erreur)
{
/* Création de la socket */
sock = socket(AF_INET, SOCK_STREAM, 0);
/* Configuration de la connexion */
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
/* Si l'on a réussi à se connecter */
if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR)
{
printf("Connection à %s sur le port %d\n", inet_ntoa(sin.sin_addr), htons(sin.sin_port));
/* Si l'on reçoit des informations : on les affiche à l'écran */
while(1)
{
if (recv(sock, buffer, 32, 0) != SOCKET_ERROR)
{ printf("Recu : %s\n", buffer);
//char buffer[32] = "";
}
}
/* sinon, on affiche "Impossible de se connecter" */
/*else
{
printf("Impossible de se connecter\n");
}*/
/* On ferme la socket */
closesocket(sock);
}
}
/* On attend que l'utilisateur tape sur une touche, puis on ferme */
getchar();
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 28 janv. 2011 à 14:27
Salut,
send() et recv() ne manipulent pas des chaines de caractères (le fait qu'ils prennent des char* comme argument est trompeur) mais des octets.
coté serveur, tu envoies bien ta chaine suivie de son zéro final, mais pas seulement puisque tu envoies 32 octets alors que buffer contient la chaine "Bienvenue sur le serveur UPA". il y a donc un premier problème ici.
coté client, tu n'as qu'un recv, autrement dit tu supposes que tu va recevoir d'un coup tout ce qui t'a été envoyé par le send, ce qui n'est pas garanti. il se peut donc que tu fasses un printf sur buffer alors même que buffer ne contient pas de chaine de caractères valide (pas de zéro final).
baptchr55
Messages postés34Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 6 avril 2011 31 janv. 2011 à 19:40
En effet ces sockets me posent bien des problèmes... J'ai essayé 50codes différents remodelés à ma sauce sans succès... J'obtiens bien des connexion, cette partie je la maitrise. Mais en ce qui concerne la réception, ce n'est pas la meme histoire... !!!