dekai
Messages postés8Date d'inscriptionvendredi 30 mai 2003StatutMembreDernière intervention 4 juillet 2008
-
7 mars 2004 à 06:09
reistlein
Messages postés4Date d'inscriptionsamedi 8 octobre 2005StatutMembreDerniè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).
//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
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;
}
dekai
Messages postés8Date d'inscriptionvendredi 30 mai 2003StatutMembreDerniè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 ?!?