Se connecter avec
S'enregistrer | Connectez-vous

Libws2_32.a : je dois la mettre ou?

Dernière réponse : dans Programmation

bonjour

Je suis en train de lire le tutoriel des sockets et je comprend pas ce que demande l'auteur ici

Citation :

Sur Windows


Tout d'abord, n'oubliez pas, dans chaque projet que vous créez, d'ajouter le fichier "ws2_32.lib" (pour le compilateur Visual C++) ou "libws2_32.a" (pour les autres) dans votre éditeur de liens. Vous trouverez ce fichier dans le dossier "lib" de votre IDE. J'insiste un peu, car on oublie très souvent de le faire


J'ai trouvé "libws2_32.a" mais ou je dois le mettre ? Avez vous un idée ?

PS: j'ai essayé de le mettre dans le projet code::block mais ça ne marche pas !

Autres pages sur : libws2 dois mettre

Lassé par la pub ? Créez un compte
Expert Programmation

Dans le répertoire de code::block, tu dois avoir un répertoire lib quelque part. Tu y mets ton .a
Ensuite, tu dois ajouter dans les paramètres de ton projet la bibliothèque (library) "libws_32.a", à la ligne de compilation, tu devrais avoir "-llibws2_32".
Expert Programmation

En fait, ton fichier .a, c'est du code exécutable, c'est une partie de ton programme.
Lorsque tu compiles ton programme, au début, plusieurs fichiers objets (.o pour toi) sont créés et sont aussi du code exécutable.
A la fin de la compilation, il y a le lieur (linker) qui rassemble tout pour faire ton exécutable. C'est là qu'il faut lui indiquer de prendre ta bibliothèque .a
Pour faire ça, dans tous les IDE (comme code::block), il y a un endroit dans les paramètres de ton projet où tu indiques toutes les bibliothèques à lier. Donc, va dans les menus et cherche ces options.

J'ai fais (sous codeblock) pour ajouter une bibliothèque à l'éditeur de liens, Project / Build Options... / linker settings puis add dans la partie link library, puis rechercher libws2_32.a


Mais ça ne marche toujours pas...

J'ai toujours plusieurs erreurs et warning lors de la compilation...

Citation :
ro\test\main.c||In function `main'
ro\test\\main.c|34|error: `SOCKADDR_IN' undeclared (first use in this function)|
ro\test\\main.c|34|error: (Each undeclared identifier is reported only once|
ro\test\\main.c|34|error: for each function it appears in.)|
ro\test\\main.c|34|error: syntax error before "sin"|
ro\test\\main.c|35|error: `SOCKET' undeclared (first use in this function)|
ro\test\\main.c|36|error: `socklen_t' undeclared (first use in this function)|
ro\test\\main.c|49|error: `sock' undeclared (first use in this function)|
ro\test\\main.c|49|warning: implicit declaration of function `socket'|
ro\test\\main.c|49|error: `AF_INET' undeclared (first use in this function)|
ro\test\\main.c|49|error: `SOCK_STREAM' undeclared (first use in this function)|
ro\test\\main.c|52|error: `INVALID_SOCKET' undeclared (first use in this function)|
ro\test\\main.c|57|error: `sin' undeclared (first use in this function)|
ro\test\\main.c|57|warning: implicit declaration of function `htonl'|
ro\test\\main.c|57|error: `INADDR_ANY' undeclared (first use in this function)|
ro\test\\main.c|59|warning: implicit declaration of function `htons'|
ro\test\\main.c|60|warning: implicit declaration of function `bind'|
ro\test\\main.c|60|error: `SOCKADDR' undeclared (first use in this function)|
ro\test\\main.c|60|error: syntax error before ')' token|
ro\test\\main.c|60|error: `recsize' undeclared (first use in this function)|
ro\test\\main.c|63|error: `SOCKET_ERROR' undeclared (first use in this function)|
ro\test\\main.c|66|warning: implicit declaration of function `listen'|
ro\test\\main.c|74|error: `csock' undeclared (first use in this function)|
ro\test\\main.c|74|warning: implicit declaration of function `accept'|
ro\test\\main.c|74|error: syntax error before ')' token|
ro\test\\main.c|74|error: `csin' undeclared (first use in this function)|
ro\test\\main.c|74|error: `crecsize' undeclared (first use in this function)|
ro\test\\main.c|75|warning: implicit declaration of function `inet_ntoa'|
ro\test\\main.c|75|warning: format argument is not a pointer (arg 3)|
ro\test\\main.c|85|warning: implicit declaration of function `closesocket'|
||=== Build finished: 20 errors, 9 warnings ===|
Expert Programmation

Ah oui, là c'est avant le problème du linker, c'est un problème de compilation, parce que tu n'as pas inclus les fichier .h qui définissent toutes les structures et nom de fonctions. Donc, mets le #include <le_fichier.h> qui va bien là.

ps: pas besoin de faire un Up au bout de quelques heures... (si ça m'énerve trop, je risque de ne plus répondre :)  )

C'est déjà fait..

Voici mon code pour mieux comprendre le problème :

  1. #if defined (WIN32)
  2. #include <winsock2.h>
  3. typedef int socklen_t;
  4. #elif defined (linux)
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <unistd.h>
  10. #define INVALID_SOCKET -1
  11. #define SOCKET_ERROR -1
  12. #define closesocket(s) close(s)
  13. typedef int SOCKET;
  14. typedef struct sockaddr_in SOCKADDR_IN;
  15. typedef struct sockaddr SOCKADDR;
  16. #endif
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #define PORT 23
  21.  
  22.  
  23.  
  24. int main(void)
  25. {
  26. #if defined (WIN32)
  27. WSADATA WSAData;
  28. int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
  29. #else
  30. int erreur = 0;
  31. #endif
  32.  
  33. /* Socket et contexte d'adressage du serveur */
  34. SOCKADDR_IN sin;
  35. SOCKET sock;
  36. socklen_t recsize = sizeof(sin);
  37.  
  38. /* Socket et contexte d'adressage du client */
  39. SOCKADDR_IN csin;
  40. SOCKET csock;
  41. socklen_t crecsize = sizeof(csin);
  42.  
  43. int sock_err;
  44.  
  45.  
  46. if(!erreur)
  47. {
  48. /* Création d'une socket */
  49. sock = socket(AF_INET, SOCK_STREAM, 0);
  50.  
  51. /* Si la socket est valide */
  52. if(sock != INVALID_SOCKET)
  53. {
  54. printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);
  55.  
  56. /* Configuration */
  57. sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */
  58. sin.sin_family = AF_INET; /* Protocole familial (IP) */
  59. sin.sin_port = htons(PORT); /* Listage du port */
  60. sock_err = bind(sock, (SOCKADDR*)&sin, recsize);
  61.  
  62. /* Si la socket fonctionne */
  63. if(sock_err != SOCKET_ERROR)
  64. {
  65. /* Démarrage du listage (mode server) */
  66. sock_err = listen(sock, 5);
  67. printf("Listage du port %d...\n", PORT);
  68.  
  69. /* Si la socket fonctionne */
  70. if(sock_err != SOCKET_ERROR)
  71. {
  72. /* Attente pendant laquelle le client se connecte */
  73. printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
  74. csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
  75. printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
  76. }
  77. else
  78. perror("listen");
  79. }
  80. else
  81. perror("bind");
  82.  
  83. /* Fermeture de la socket client et de la socket serveur */
  84. printf("Fermeture de la socket client\n");
  85. closesocket(csock);
  86. printf("Fermeture de la socket serveur\n");
  87. closesocket(sock);
  88. printf("Fermeture du serveur terminée\n");
  89. }
  90. else
  91. perror("socket");
  92.  
  93. #if defined (WIN32)
  94. WSACleanup();
  95. #endif
  96. }
  97.  
  98. return EXIT_SUCCESS;
  99. }

Merci il fallait mettre _WIN32..

J'ai crée 2 projets (sous code::block) Serveur et Client pour tester, mais pourquoi quand je compile c'est le 2eme projets (Client) qui s'exécute ?

Comment compilé le projets Serveur et Client l'un après l'autre?

Merc ia vous c'est bon j'ai trouvé..

Comment faire une connexion distante a partir d'un code source serveur et client ?

Y a t-il une personne qui peut jouer le rôle du client pour essayer une connexion distante en envoyant un petit message ?
Lassé par la pub ? Créez un compte
Tom's guide dans le monde