WinSock sous VC 6

Résolu
Vlad Mortelame Messages postés 7 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 11 avril 2009 - 11 mars 2008 à 20:25
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 18 mars 2008 à 01:02
Bonjour

J'ai fait un programme de serveur ( avec #include <winsock2.h> ) dont j'arriver à compiller sous DEV C++ (en ajoutant la librairie). Cependant je voudrais le faire sous VC 6 j'ai tout essayer et ca ne marche pas J'ai tout plein d'erreur car il ne trouve pas la librairie (e.g: "error C2275: 'SOCKET' : illegal use of this type as an expression" )

j'ai essayé:
ajouter dans projet setting > link >library modules> ws2_32.lib puis wsock32.lib puis les deux

j'ai aussi essayer #pragma comment(lib, "ws2_32.lib") et #pragma comment(lib, "wsock32.lib")

si vous avez une idée pour m' aider, je vous écoute

a++

11 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 mars 2008 à 19:52
Bah si tu veux compiler en C, suffis simplement de déplacer WSAStartup(MAKEWORD(2,0), &WSAData);
après toutes déclarations de variables:

char buffer[255] = {0} ;
 WSADATA WSAData;
 SOCKET sock;
 SOCKET csock;
 SOCKADDR_IN sin;
 SOCKADDR_IN csin;

 WSAStartup(MAKEWORD(2,0), &WSAData);

Pour l'erreur de link, c'est que tu as créé un projet windows (GUI) mais que tu utilises un main de console. Tu as 2 choix, soit tu recrées un projet console, soit tu changes ton
int main () par:
int __stdcall WinMain (HINSTANCE hInst, HINSTANCE hPrev, char *cmdl, int show)

Cependant, si tu travails en GUI, tu ne peux plus utiliser de console directement avec printf et compagine.

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mars 2008 à 21:10
C2275 est une erreur du compilateur.

Le compilateur de C de VC++ ne supporte pas la norme C99, dont la possibilité de déclarer ses variables n'importe où dans le code. En C non C99, toute variables doivent être déclaré en début de bloc:

{
    int var1;
    int var2;
    ...
}

C++ (@++)<!--
0
Vlad Mortelame Messages postés 7 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 11 avril 2009
12 mars 2008 à 13:56
Oui elle ne sont pas déclarer car il ne link pas avec la
bonne librairie ou qu'il ne link pas du tout. Car sur DEV quand il link il reconnaît
les variables.


Ça ne résout pas mon problème je ne vais pas taper toute la librairie au début
de mon programme ...
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 mars 2008 à 14:32
Ce n'est pas au link que ça ne fonctionne pas mais à la compilation.
C2275 est une erreur du compilateur

Pour ton problème, il n'y a pas de solution magique. Soit tu recode le code, soit tu restes sous dev-c++ ou encore, soit tu compiles en C++.

C++ (@++)<!--
0

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

Posez votre question
Vlad Mortelame Messages postés 7 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 11 avril 2009
12 mars 2008 à 14:49
voila mon code (un truc tout simple) c'est mon premier programme avec winsock donc je ne gere pas du tout et en plus j'ai pompé des source d'un peu partout. A part la fin où j'ai merdé qu'est que je dois refaire ?
merci

#include <winsock.h>
#pragma comment(lib, "ws2_32.lib")

int main(void)
{
 char buffer[255] = {0} ;
 WSADATA WSAData;
 WSAStartup(MAKEWORD(2,0), &WSAData);
 SOCKET sock;
 SOCKET csock;
 SOCKADDR_IN sin;
 SOCKADDR_IN csin;
 sock = socket(AF_INET, SOCK_STREAM, 0);
 sin.sin_addr.s_addr            = INADDR_ANY;
 sin.sin_family                = AF_INET;
 sin.sin_port                = htons(6667);
 bind(sock, (SOCKADDR *)&sin, sizeof(sin));
 listen(sock, 0);
 do
 {
  int sinsize = sizeof(csin);
  if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
   {
     send(csock, "Bienvenue!\r\n", 12, 0);
     recv(sock, buffer, 255, 0);
     send(sock, buffer, 255, 0);
    }
}
 while(1);
}
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 mars 2008 à 14:58
ok tu utilise ws2_32. Utilise donc le header winsock2. Inclue aussi windows.h APRÈS winsock2.h

#include <winsock2.h>
#include <windows.h>

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

ça devrait fonctionner ainsi.

C++ (@++)<!--
0
Vlad Mortelame Messages postés 7 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 11 avril 2009
12 mars 2008 à 18:25
J'ai ajouté comme tu me l'as conseillé mais j'ai toujours ces 15 erreures recurantes. je ne comprend vraiment pas
0
Vlad Mortelame Messages postés 7 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 11 avril 2009
12 mars 2008 à 18:37
par contre si je le compile en C++ ca marche mais ca ne veux pas "construire" (build)

"Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/JDR.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe."
0
Vlad Mortelame Messages postés 7 Date d'inscription dimanche 4 septembre 2005 Statut Membre Dernière intervention 11 avril 2009
12 mars 2008 à 19:58
"
Bah si tu veux compiler en C, suffis simplement de déplacer WSAStartup(MAKEWORD(2,0), &WSAData);
après toutes déclarations de variables:"

voila ça marche merci de m'avoir aider car ca commencait a me prendre la tete
c'est sympa
a++
0
darrylsite Messages postés 5 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 10 septembre 2010
17 mars 2008 à 19:28
Moi, je developpe  sous vc++ 2005 express et je n' arrive pas a trouver le header winsock2.h ni la librairie  sw2_23.lib.
Si quelqu' un pourra m' aider ce sera sympa.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 mars 2008 à 01:02
sw2_23 ??
Jamais entendu parler de cette lib. Relis les messages plus haut pour avoir le vrai nom.

Pour winsock2.h, il faut installer la PSDK
http://www.cppfrance.com/code.aspx?id=38359

C++ (@++)<!--
0
Rejoignez-nous