Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: hackstyle18 en 13 Julio 2010, 21:32 pm



Título: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: hackstyle18 en 13 Julio 2010, 21:32 pm
Buenas pues intento compilar este ejemplo pero añado la libreria de winsock, pero soy nuevo en esto de sockets en c y nose si ai que añadir alguna mas. aqui dejo el source del programa que intento compilar, es un cliente:

Código:
int main()
{
WSADATA wsa;
SOCKET sock;
struct hostent *host;
struct sockaddr_in direc;
int conex;
char Buffer[1024];
int len;
//Inicializamos
WSAStartup(MAKEWORD(2,2),&wsa);
//resolvemos el nombre de dominio localhost, esto se resolverá a 127.0.0.1
host=gethostbyname("localhost");
//creamos el socket
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock==-1)
{
printf("Error al crear el socket");
return -1;
}
//Definimos la dirección a conectar que hemos recibido desde el gethostbyname
//y decimos que el puerto al que deberá conectar es el 9999 con el protocolo ipv4
direc.sin_family=AF_INET;
direc.sin_port=htons(9999);
direc.sin_addr = *((struct in_addr *)host->h_addr);
memset(direc.sin_zero,0,8);
//Intentamos establecer la conexión
conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
if (conex==-1) //si no se ha podido conectar porque no se ha encontrado el host o no
//está el puerto abierto
{
printf("No se ha podido conectar\n");
return -1;
}
printf("[MiniXat para tutorial de sockets MazarDZone Foro]\n");
printf("[escribe el texto a enviar o 'salir' para salir ]\n");
while (len!=-1 && strcmp(Buffer,"salir")!=0) //mientras el socket no se haya desconectado
//y no se escriba salir
{
printf("Texto a enviar:");
fgets(Buffer,1023,stdin); //pedir texto a enviar por pantalla
len=send(sock,Buffer,strlen(Buffer),0); //enviar el texto que se ha introducido
}
return 0;
}


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: Littlehorse en 13 Julio 2010, 21:35 pm
Incluye la librería winsock2:

Código
  1. #include <winsock2.h>

Si no funciona, postea el error de compilación.

Saludos


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: hackstyle18 en 13 Julio 2010, 21:40 pm
Me tira este error tanto con la libreria winsock.h y la winsock2.h,

incluyo las librerias y nada:

Código:
#include <stdio.h>
#include <winsock2.h>


Código:
D:\Documents and Settings\manuyelvira\Escritorio\Cliente.o:Cliente.c:(.text+0x45)||undefined reference to `_WSAStartup@8'|
D:\Documents and Settings\manuyelvira\Escritorio\Cliente.o:Cliente.c:(.text+0x54)||undefined reference to `_gethostbyname@4'|
D:\Documents and Settings\manuyelvira\Escritorio\Cliente.o:Cliente.c:(.text+0x79)||undefined reference to `_socket@12'|
D:\Documents and Settings\manuyelvira\Escritorio\Cliente.o:Cliente.c:(.text+0xbb)||undefined reference to `_htons@4'|
D:\Documents and Settings\manuyelvira\Escritorio\Cliente.o:Cliente.c:(.text+0x119)||undefined reference to `_connect@12'|
D:\Documents and Settings\manuyelvira\Escritorio\Cliente.o:Cliente.c:(.text+0x1e2)||undefined reference to `_send@16'|
||=== Build finished: 6 errors, 0 warnings ===|


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: @synthesize en 13 Julio 2010, 21:46 pm
Has copiado algo del enlace que te puse en el otro post? Te recuerdo que era para GNU/Linux y parece que estás compilando bajo windows.


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: Eternal Idol en 13 Julio 2010, 21:46 pm
Esos son errores al enlazar, te falta la libreria de importacion, necesitas pasarle al enlazador esto: -lwsock32.


No se que IDE estaras usando, con suerte podes agregarlo en:
Project>>Project Options>>Parameters.


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: Littlehorse en 13 Julio 2010, 21:49 pm
hackstyle18, estas con Visual Studio, no? prueba a:

Código
  1. #pragma comment( lib, "ws2_32.lib" )

O bien agrega Ws2_32.lib a las dependencias adicionales en la configuración del linker.

Saludos!

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: Eternal Idol en 13 Julio 2010, 21:56 pm
No, el mismo tipo de error con estilo VC++:

Cliente.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function _main


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: Littlehorse en 13 Julio 2010, 22:01 pm
Si, es verdad, viendo bien los errores parece mas Code::Blocks. Si es ese el caso, olvidate del pragma y revisa la configuración del proyecto para agregar los parámetros adicionales al linker, tiene que estar mas o menos por donde te menciono EI.

Saludos


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: leogtz en 13 Julio 2010, 23:28 pm
Si es code::block está en:
Settings->compiler and debugger->linker settings


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: hackstyle18 en 14 Julio 2010, 00:27 am
Gracias por todas vuestras respuestas :P e tenido que salir y no e podido verlo antes, probare las soluciones que me dais, seguro que si que es lo de añadir los parametros al enlazador del code::blocks, ^^ gracias ;)

EI: juntando mensajes.

Gracias, ya lo e solucionado añadiendo la libreria del SDK al linker del code::blocks

gracias a todos , Saludos ;)


Título: Re: ¿que librerias tengo que añadir para usar sockets en c/c++?
Publicado por: Eternal Idol en 14 Julio 2010, 01:09 am
De nadas  ::)