Salut à tous!!!
Moi j'ai un probleme avec les sockets!!!
Je commence tous juste à apprendre comment fonctionne les sockets, quand je veux compiler un prog qui utilise les sockets, j'obtient ces résultats :
avec dev c++ 4.9.9.0 :
In function `main':
15 : `sockaddr_in' undeclared (first use in this function)
(Each undeclared identifier is reported only once
for each function it appears in.)
15 : parse error before "adresse_socket"
28 : `adresse_socket' undeclared (first use in this function)
avec dev c++.4 :
15 : `sockaddr_in' undeclared (first use in this function)
15 : (Each undeclared identifier is reported only once
15 : for each function it appears in.)
15 : parse error before `adresse_socket'
28 : `adresse_socket' undeclared (first use in this function)
Voici le code que j'ai voulu compiler :
#include <stdio.h>
#include <string.h>
#include <winsock.h>
#include <unistd.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wsaData;
int res,my_socket,port;
char *adresse = "127.0.0.1";
sockaddr_in adresse_socket;
int receive, envoie, total_rcv = 0;
char *chaine;
char Buffer[64];
if((res = WSAStartup(MAKEWORD(2,0), &wsaData)) != 0)
printf("Impossible d'initialiser l'API Winsock 2.0\n");
if((my_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
printf("Echec de création de la socket !\n");
memset(&adresse_socket,0x0,sizeof(adresse_socket));
adresse_socket.sin_family = AF_INET;
adresse_socket.sin_port = htons(port);
adresse_socket.sin_addr.S_un.S_addr = inet_addr(adresse);
if((res = connect(my_socket,(struct sockaddr *) &adresse_socket,
sizeof(adresse_socket))) != 0)
printf("Impossible de se connecter !\n");
if(send(my_socket,chaine,strlen(chaine),0) != strlen(chaine))
printf("Echec de l'envoie des données !\n");
while(total_rcv < strlen(chaine))
{
if((receive = recv(my_socket,Buffer,63,0)) <= 0)
printf("Echec de reception des donnees !\n");
total_rcv += receive;
Buffer[total_rcv] = '\0';
printf(Buffer);
}
return 0;
}
A chaque fois que je souhaite compiler un prog qui utilise les sockets, ce sont les meme érreur qui reviennent, ces erreur correspondent aux lignes :
sockaddr_in adresse_socket;
et
memset(&adresse_socket,0x0,sizeof(adresse_socket));
Tu dois vérifier que sockaddr_in se trouve bien dans les librairies que tu inclus.
Il faut que tu vérifies si tu le trouve si sa syntaxe est exactement la même (majuscule et minuscule), car DevC++ ne trouve pas ce type.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Il faut donc que tu inclues winshock2.h et non pas winshok.h
[quote]char *adresse = "127.0.0.1";[/quote]
Je te conseille de faire, la délcaration, puis après l'affectation, soit en statique, soit en dynamique mais pas directement comme ça.
Par exemple en statique :
[code]char adresse[16];
strcpy(adresse,"127.0.0.1");[/code]
Soit en dynamique :
[code]char* adresse = new char[16];
strcpy(adresse,"127.0.0.1");[/code]
__________________________
Lisez la [url=http://www.forum.moteurprog.com/bavardages/forum-msg-22857-1.htm]charte[/url], pensez à regarder la [url=http://www.forum.moteurprog.com/FAQ/FAQ.php]FAQ[/url], les [url=http://www.moteurprog.com/Tutoriaux/]tutoriaux[/url], l'[url=http://www.moteurprog.com/Annuaire/]annuaire[/url] et faites une [url=http://www.forum.moteurprog.com/Rechercher/Index.php]recherche[/url] dans les forums.
N'oubliez pas le Tag [b][Résolu][/b][img]http://www.ressources.moteurprog.com//Ressources/Images/Forum/Resolu.gif[/img].
Initiez-vous à Delphi avec [url=http://www.turboexplorer.com/delphi]Turbo Delphi Explorer[/url], au C ou au C++ avec [url=http://www.codeblocks.org]Code::Blocks[/url] et C# avec [url=http://www.microsoft.com/france/msdn/vstudio/express/vcsharp/telechargez.mspx]Visual C# 2005 Express[/url].
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
J'ai fait tous les changements que tu m'as dit, avec dev c++ 4.9.9.0, j'ai toujours plein d'erreurs, mais avec dev c++ 4 j'ai plus qu'une erreur :
3 : C:\DEV-C_~1\Include\winsock2.h:46: unbalanced `#endif'
Hum, ce n'est pas bon signe. Apparement, il se pourrait qu'il y ait une erreur dans winsock2.h
Ouvres le pour voir et cherche #endif en fin de fichier.
S'il n'y est pas, rajoute le.
Montres aussi le début de ton code pour voir.
Dans winsock2.h, il faut qu'il fasse au départ, #ifndef TRUC_H
#define TRUC_H
....
#endif.
Montres pour voir le début et la fin de ce fichier aussi pour voir.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Bien, en fait, j'ai retrouvé le fichier et il faut avouer qu'il n'est pas facile de compter le nombre de #endif et de #ifndef et #ifdef.
Montre toujours le début de ton code pour voir.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Désolé, mais je ne vois pas de problème dans le code, s'il vient effectivement de winshock2.h, il n'y a pas grand chose à faire.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].