begin process at 2012 05 30 05:37:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Réseau & Internet

 > 

Problèmes avec les Socket


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

Problèmes avec les Socket

mardi 25 janvier 2011 à 16:16:25 | Problèmes avec les Socket

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 seule problème mon code ne lis que la première donnée reçu et se ferme (Site du zéro).

Si quelqu'un peut m'éclaircir un peu ??

Merci d'avance.

***** Client *****

#if defined (WIN32)
#include <winsock2.h>
typedef int socklen_t;
#elif defined (linux)
#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;
#endif

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

#define PORT 1664



int main(void)
{
#if defined (WIN32)
WSADATA WSAData;
int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
#else
int erreur = 0;
#endif

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



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




#if defined (WIN32)
#include <winsock2.h>
typedef int socklen_t;
#elif defined (linux)
#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;
#endif

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

#define PORT 1664



int main(void)
{

int erreur = 0;


SOCKET sock;
SOCKADDR_IN sin;
SOCKET csock;
SOCKADDR_IN csin;
char buffer[32] = "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);

if(sock_err != SOCKET_ERROR)
printf("Chaine envoyée : %s\n", buffer);


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

printf("entrez la chaine à envoyer :\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");
}

#if defined (WIN32)
WSACleanup();
#endif
}

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

return EXIT_SUCCESS;
}




jeudi 27 janvier 2011 à 04:22:48 | Re : Problèmes avec les Socket

donkeeland

Deja, indente ton source et utilise les balises pour le cpp [code =cpp][/code]

Ton code n'est pas fait pour lire/envoyer plus d'une seule donnee.
Si tu veux en lire plusieurs il faut faire des boucles au niveaux de la lexture/ecriture


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 Pb chaine de caractères [ 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 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

Photothèque

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 : 0,562 sec (3)

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