Socket winsock grrr

dekai Messages postés 8 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 4 juillet 2008 - 7 mars 2004 à 06:09
reistlein Messages postés 4 Date d'inscription samedi 8 octobre 2005 Statut Membre Dernière intervention 4 avril 2006 - 11 avril 2006 à 15:34
Voilà mon pb lorsque je tente un send ou recv j'obtient une erreur et ej comprends pas pourquoi. Merci de m'aider.

Voici le code (je travaille sous dev-c++ 4.9.8.0) :

#include <winsock.h>
#include <stdio.h>

//global variable
int Socket;
//end global variable

void initialize_socket(int port)
    {    
//variables
     WSADATA data;
     struct sockaddr_in name;
     int name_lenght = sizeof (name);
//end variables

//initialize winsock
     if (WSAStartup(MAKEWORD(1,1), &data) != 0)
     printf ("Impossible d'initialiser Winsock.\n\n");
     else printf("Winsock initialisé avec succès.\n\n");
//end initialize winsock

//create socket
     Socket = socket (AF_INET, SOCK_STREAM, 0);
     if (Socket == INVALID_SOCKET)
     printf("Erreur lors de la création de la socket : erreur %d.\n\n", WSAGetLastError());
     else printf ("Socket créée avec succès.\n\n");
//end create socket
   
//bind socket
     name.sin_family = AF_INET;
     name.sin_port = htons (port);
     name.sin_addr.S_un.S_addr = htonl (INADDR_ANY);
     if (bind (Socket, (struct sockaddr *) &name, sizeof (name)) == SOCKET_ERROR)
     printf("Erreur lors du bind de la socket : erreur %d.\n\n", WSAGetLastError());
     else printf("Bind de la socket réalisé avec succès.\n\n");
//end bind socket

//socket in listen mode
     if (listen (Socket, SOMAXCONN) == SOCKET_ERROR)
     printf("Impossible de mettre la socket en mode écoute : erreur %d.\n\n", WSAGetLastError());
     else printf ("Socket en mode écoute.\n\n");
//end socket in listen mode
    
//socket accept incoming connection
     if (accept (Socket, (struct sockaddr *) &name, &name_lenght) == INVALID_SOCKET)
     printf("Connexion cliente refusée : erreur %d.\n\n", WSAGetLastError());
     else printf ("Connexion cliente acceptée.\n\n");
//end socket accept incoming connection
    }

void receive_data_from_a_connected_socket(char *buffer)
    {
     if (recv (Socket, buffer, strlen(buffer), 0) == SOCKET_ERROR)
     printf("Impossible de recevoir depuis le client : erreur %d.\n\n", WSAGetLastError());
     else printf ("Reception à partir du client ok.\n\n");
    }

void send_data_on_a_connected_socket(char *buffer)
    {
     if (send (Socket, buffer, strlen(buffer), 0) == SOCKET_ERROR)
     printf ("Erreur d'envoi vers le client : erreur %d.\n\n", WSAGetLastError());
     else printf ("Envoi vers le client ok.\n\n");
    }
    
int main()
   {
    char buffer[1024];
    char welcome [] = "coucou c'est moi";
    initialize_socket(25);
    send_data_on_a_connected_socket(welcome);
    receive_data_from_a_connected_socket(buffer);
    system("PAUSE");
   }


Ne pas oublier -lwsock32 lors de l'appel du compilateur (cf option du compilateur).

10 réponses

petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
7 mars 2004 à 10:22
Salut,

#include <winsock2.h>
#include <stdio.h>

#pragma comment(lib,"ws2_32.lib")

//global variable

SOCKET Socket;
SOCKET SocketClient;

//end global variable

void initialize_socket(int port)
{
//variables
WSADATA data;
struct sockaddr_in name;
int name_lenght = sizeof (name);
//end variables

//initialize winsock
if (WSAStartup(MAKEWORD(2,0), &data) != 0)
printf ("Impossible d'initialiser Winsock.\n\n");
else
printf("Winsock initialisé avec succès.\n\n");
//end initialize winsock

//create socket
Socket = socket (AF_INET, SOCK_STREAM, 0);
if (Socket == INVALID_SOCKET)
printf("Erreur lors de la création de la socket : erreur %d.\n\n", WSAGetLastError());
else
printf ("Socket créée avec succès.\n\n");
//end create socket

//bind socket
name.sin_family = AF_INET;
name.sin_port = htons (port);
name.sin_addr.s_addr=INADDR_ANY;
if (bind (Socket, (struct sockaddr *) &name, sizeof (name)) == SOCKET_ERROR)
printf("Erreur lors du bind de la socket : erreur %d.\n\n", WSAGetLastError());
else
printf("Bind de la socket réalisé avec succès.\n\n");
//end bind socket

//socket in listen mode
if (listen (Socket, SOMAXCONN) == SOCKET_ERROR)
printf("Impossible de mettre la socket en mode écoute : erreur %d.\n\n", WSAGetLastError());
else
printf ("Socket en mode écoute.\n\n");
//end socket in listen mode

//socket accept incoming connectionif ((SocketClient accept (Socket, (struct sockaddr *) &name, &name_lenght)) INVALID_SOCKET)
printf("Connexion cliente refusée : erreur %d.\n\n", WSAGetLastError());
else
printf ("Connexion cliente acceptée.\n\n");
//end socket accept incoming connection
}

void receive_data_from_a_connected_socket(char *buffer)
{
if (recv (SocketClient, buffer, sizeof(buffer), 0) == SOCKET_ERROR)
printf("Impossible de recevoir depuis le client : erreur %d.\n\n", WSAGetLastError());
else
printf ("Reception à partir du client ok.(%s)\n\n",buffer);
}

void send_data_on_a_connected_socket(char *buffer)
{
if (send(SocketClient, buffer, strlen(buffer), 0) == SOCKET_ERROR)
printf ("Erreur d'envoi vers le client : erreur %d.\n\n", WSAGetLastError());
else
printf ("Envoi vers le client ok.\n\n",buffer,SocketClient);
}

int main()
{
char buffer[1024];
char welcome [] = "coucou c'est moi\r\n";
initialize_socket(6667);
send_data_on_a_connected_socket(welcome);
memset(buffer,0,sizeof(buffer));
receive_data_from_a_connected_socket(buffer);
system("PAUSE");
return 0;
}
0
dekai Messages postés 8 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 4 juillet 2008
7 mars 2004 à 21:37
Super merci bien.
0
dekai Messages postés 8 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 4 juillet 2008
8 mars 2004 à 03:14
Ah non encore un pb je comprends pas pourquoi lorsque j'execute la fonction receive_data_from_a_connected_socket la socket se ferme après avoir récupérer un seul caractère alors que la taille du buffer est de 1024 ?!?
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
8 mars 2004 à 12:25
Ta essayer avec telnet ?
si oui c telnet il envoi des un caractere des ke tu prece une touche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dekai Messages postés 8 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 4 juillet 2008
8 mars 2004 à 17:59
Ouais exact j'ai essayer avec telnet donc tu penses que c'est lui le pb ? Bon ben je vais coder un petit client alors. Merci pour ton aide.
0
petitedouceur Messages postés 3 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 26 mai 2005
26 mai 2005 à 23:12
petichech>> C'est pas chaud de jouer avec des variables globales?
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
27 mai 2005 à 13:15
eu comment sa ?
0
reistlein Messages postés 4 Date d'inscription samedi 8 octobre 2005 Statut Membre Dernière intervention 4 avril 2006
11 avril 2006 à 11:19
super programme mais quand tu envoies tu n'envoie que 4 caractère car

send(SocketClient, buffer, sizeof(buffer), 0)

au lieu de

send(SocketClient, buffer, sizeof(char)* strlen(buffer), 0)

pour recevoir

c'est

recev(SocketClient, buffer, sizeof(char)*1024, 0)



je ne suis pas un pro en c++ si je me suis planter dite le moi.

aller @+
0
reistlein Messages postés 4 Date d'inscription samedi 8 octobre 2005 Statut Membre Dernière intervention 4 avril 2006
11 avril 2006 à 15:34
d'ailleur je me suis plantée c'est

recev(SocketClient, buffer, 1024, 0)

car la chaine est initialiser a 0 au depart donc sa taille est 0 d'ou souci.
0
reistlein Messages postés 4 Date d'inscription samedi 8 octobre 2005 Statut Membre Dernière intervention 4 avril 2006
11 avril 2006 à 15:34
d'ailleur je me suis plantée c'est

recev(SocketClient, buffer, 1024, 0)

car la chaine est initialiser a 0 au depart donc sa taille est 0 d'ou souci.
0
Rejoignez-nous