begin process at 2012 05 29 17:57:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

Pb chaine de caractères


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb chaine de caractères

jeudi 27 janvier 2011 à 17:09:58 | Pb chaine de caractères

baptchr55




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 :

Envoyé : Essai Envoi Trame (coté serveur)

Recu : Essai (coté client...)
Recu : Envoi
Recu : Trame

J'ai essayé le type "string" à la place du tableau ainsi que les pointeurs sans succès...
Je n'ai plus d'idées.

Merci d'avance...

************** Serveur *****************


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket(s) close(s)
typedef int SOCKET;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

using namespace std;

#define PORT 1664
#define size 50



int main(void)
{

int erreur = 0;


SOCKET sock;
SOCKADDR_IN sin;
SOCKET csock;
SOCKADDR_IN csin;
char buffer[size] = "Bienvenue sur le serveur UPA";
socklen_t recsize = sizeof(csin);
int sock_err;

/* Si les sockets Windows fonctionnent */
if(!erreur)
{
sock = socket(AF_INET, SOCK_STREAM, 0);

/* Si la socket est valide */
if(sock != INVALID_SOCKET)
{
printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);

/* Configuration */
sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */
sin.sin_family = AF_INET; /* Protocole familial (IP) */
sin.sin_port = htons(PORT); /* Listage du port */
sock_err = bind(sock, (SOCKADDR*)&sin, sizeof(sin));

/* 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));


sock_err = send(csock, buffer, 32, 0);
printf("Chaine envoyée : %s\n", buffer);

while(1)
{
if(sock_err != SOCKET_ERROR)
{

cin>>buffer;

cout<<"Chaine Envoyée : "<<buffer<<endl;
sock_err = send(csock, buffer, 32, 0);

}

else{ printf("Erreur de transmission\n");}
}

/* Il ne faut pas oublier de fermer la connexion (fermée dans les deux sens) */
shutdown(csock, 2);
}
}

/* Fermeture de la socket */
printf("Fermeture de la socket...\n");
closesocket(sock);
printf("Fermeture du serveur terminee\n");
}


}

/* On attend que l'utilisateur tape sur une touche, puis on ferme */
getchar();

return EXIT_SUCCESS;
}


******************** Client ****************


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket(s) close(s)
typedef int SOCKET;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;


#include <stdio.h>
#include <stdlib.h>


#define PORT 1664



int main(void)
{

int erreur = 0;


SOCKET sock;
SOCKADDR_IN sin;
char buffer[32] = "";

/* 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();

return EXIT_SUCCESS;

}

vendredi 11 février 2011 à 22:46:55 | Re : Pb chaine de caractères

pop70

Réponse acceptée !
L'erreur vient peut-être de cin,
lorqu'on rentre plusieurs mot il insere un caractère null à la place de l'espace.

Essaie comme ceci pour voir :

Code C/C++ :
  
  char buffer[32]
    cin.get(buffer,32);// à la place de cin>>buffer;
 



C++dialement

Pop70
mardi 15 février 2011 à 12:59:37 | Re : Pb chaine de caractères

baptchr55



En effet le caractère "NULL" ma posé bien des problèmes. J'ai résolu celà en identifiant dans ma trame le caractère de fin de chaine pour ensuite la stocker dans un tableau. La traiter, puis la convertir en entiers.

Merci Bcp de ton Attention.

Cordialement.


Cette discussion est classée dans : include, socket, sin, sock, sockaddr


Répondre à ce message

Sujets en rapport avec ce message

probleme de communication entre deux programme [ par smook ] re salut le dernier message que j ai poster c etait pour les socket et la librairie "libwsock.a" mais sayer j ai passer cette etape j ai reussi a fair Problèmes avec les Socket [ par baptchr55 ] Bonjour à tous, Je suis ennuyé avec la création de socket. J'aimerais pouvoir envoyer des données (dans un premier temps que j'écris) une par une se Chaine de caractères Via Socket [ par baptchr55 ] 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, se Reseaux/Sockets pb client/serveur [ par Rayn3d ] Bonjour tous le monde, j'ai un probleme avec un programme en reseaux client/serveur : lorsque j'envoie un message au client il se decoupe en plusieu Socket C et api [ par shadow1779 ] Bonjour,j'ai un petit prob avec un bot que j'essai de faire avec l'api et les sockets en C, pour l'instant on ne peux que cliquer sur le bouton connec pb de compilation (prog utilisant un socket) [ par smook ] boujour a tous bon je vais commencer part bien vous detailler ce qui a detailler : j utilise dev c++ 4.9.9.2 et mon ^programme a pour but d ecouter un probleme de serveur multi-client [ par Mick7 ] je m'explique je suis arrivé a creer un serveur qui peut accepter 2 client mais le probleme est que si j'essaye de creer les 2 sockets sur le meme por Client serveur [ par fanch314 ] Je que le serveur et le client échange par internet.Le serveur ne voit pas de client connectéEt le buffer du client contient nimporte quoi.En gros ils Problème de connexion Socket [ par qhhu ] Bonjour !En temp normal, je programme en java, mais j'ai voulu essayer le c++parce que je trouve que c'est interessant de connaître plusieurs language socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,318 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales