2012-03-22 15 views
7

No he tenido más que problemas con Winsock desde que comencé a usarlo. Parece que no puedo inicializar Winsock para salvar mi vida. No estoy pidiendo a nadie que escriba todo el programa (como sé lo molesto que es) solo necesito ayuda con Winsock. He intentado varios compiladores y siempre recibo errores extraños.Winsock Programming

1>Compiling... 
1>main.cpp 
1>Linking... 
1>main.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>main.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>C:\Users\Rory\ProjectX\ProjectX\Debug\ProjectX.exe : fatal error LNK1120: 2 unresolved externals 
1>Build log was saved at "file://c:\Users\Rory\ProjectX\ProjectX\ProjectX\Debug\BuildLog.htm" 
1>ProjectX - 3 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Aquí está mi código:

#include <cstdlib> 
#include <iostream> 
#include <string.h> 
#include <winsock2.h> 

int iReqWinsockVer = 2; 

using namespace std; 

int main() 
{ 
    cout<<"Initializing Winsock 2...\n"; 

    // WINSOCK INITIALIZATION 

WSADATA wsaData; 

if (WSAStartup(MAKEWORD(iReqWinsockVer,0), &wsaData)==0) { 
    // Check if major version is at least iReqWinsockVer 
    if (LOBYTE(wsaData.wVersion) >= iReqWinsockVer) { 
     // Network stuff here 
    } 
    else { 
     // Required version not available 
    } 

    // Cleanup winsock 
    if (WSACleanup()!=0) { 
     // cleanup failed 
     } 
    } 
else { 
    // startup failed 
} 
    // END WINSOCK INITIALIZATION 

     system("PAUSE"); 
    } 

Respuesta

22

Añadir Ws2_32.lib como entrada enlazador.

Proyecto Properties-> enlazador> página de entrada

En esa página verá Dependencias adicionales. puso ahí - en cuenta que los nombres de biblioteca deben ser separadas con espacios O usted podría añadir esta línea directamente a su archivo de origen:

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

+1 exactamente - no es remotamente un problema de inicialización de Winsock, solo un enlazador de compilación estándar 'no resuelto'. –

0

No se olvide de definir la macro WINDOWS_LEAN_AND_MEAN antes de incluir la cabecera ventanas. De lo contrario, obtendrá toneladas de errores. Eso es porque el encabezado de Windows por defecto incluye la vieja versión winsock. Contiene muchas cosas que colisionan con el nuevo encabezado de winsock2. Pero al definir esa macro, se excluye el viejo encabezado winsock.