• Martes 30 de Abril de 2024, 06:55

Autor Tema:  Ayuda Para Compilar  (Leído 2510 veces)

guifego

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Ayuda Para Compilar
« en: Domingo 14 de Noviembre de 2004, 02:46 »
0
Nesesito ayuda por que llo no puedo compilar el siguiente codigo por que me da error

si alguien me lo puede compilar o explicarme como puedo aser, les boy agradecer


Código: Text
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <netinet/in.h>
  7. #include <sys/socket.h>
  8.  
  9. typedef struct {
  10.         char type[28];
  11.         char name[32];
  12.         char user[16];
  13.         char pass[16];
  14. }
  15. __attribute__ ((packed)) answer;
  16.  
  17. int main()
  18. {
  19.         char rcvbuffer[1024];
  20.         struct sockaddr_in sin;
  21.         answer* ans = (answer *)rcvbuffer;
  22.         int sd, ret, val;
  23.  
  24.         sin.sin_family          = AF_INET;
  25.         sin.sin_addr.s_addr     = inet_addr("255.255.255.255");
  26.         sin.sin_port            = htons(27155);
  27.  
  28.         sd = socket(AF_INET, SOCK_DGRAM, 0);
  29.         if (sd < 0)
  30.                 perror("socket");
  31.  
  32.         val = 1;
  33.         ret = setsockopt(sd, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val));
  34.         if (ret < 0)
  35.         {
  36.                 perror("setsockopt");
  37.                 exit(1);
  38.         }
  39.  
  40.         ret = sendto(sd, "gstsearch", 9, 0, &sin, sizeof(struct sockaddr));
  41.         if (ret < 0)
  42.         {
  43.                 perror("sendto");
  44.                 exit(1);
  45.         }
  46.  
  47.         ret = read(sd,&rcvbuffer,sizeof(rcvbuffer));
  48.  
  49.         printf("Type            : %s\n",ans->type);
  50.         printf("Announced Name  : %s\n",ans->name);
  51.         printf("Admin Username  : %s\n",ans->user);
  52.         printf("Admin Password  : %s\n",ans->pass);
  53.  
  54.         return 0;
  55. }
  56.  

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Ayuda Para Compilar
« Respuesta #1 en: Domingo 14 de Noviembre de 2004, 08:44 »
0
Hola  :hola:

Pon el texto del error que te da y la linea donde se produce.
Como el codigo parece que no lo has hecho tu seguramente sea algun problema de librerias, que no las hayas linkado al proyecto o algo asi.
Y por favor cuida de escribir un poco mejor que no cuesta tanto y se entiende mejor  :)

un saludo  :kicking:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Para Compilar
« Respuesta #2 en: Domingo 14 de Noviembre de 2004, 15:53 »
0
Gracias por la ayuda Diodo, me parece muy bien que me apoyes.

sin embargo el error en este codigo parece ser de casting,
especificamente para el uso de los sockets este problema es muy comun,
la estructura
sockaddr_in
es una variante de sock_addr, sin embargo todas las funciones de sockets, o al menos la mayoria soportan sockadd y no sockaddr_in.

La variarnte addr_in se usa para algunos casos especiales solo en algunas funciones, pero la mayoria no la usan.

Como sockaddr_in es una ampliacion de sockaddr  hacen casting perfectamente y sin problemas, asi que al parecer la solucion del problema es hacer casting en el sendto, habra que ver que mas errores tiene el codigo, pero si ya esta todo linkado, ese seria al unico problema.

Aca esta el codigo , la linea corregida es la del sendto.

<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>

typedef struct {
       char type[28];
       char name[32];
       char user[16];
       char pass[16];
}
__attribute__ ((packed)) answer;

int main()
{
       char rcvbuffer[1024];
       struct sockaddr_in sin;
       answer* ans = (answer *)rcvbuffer;
       int sd, ret, val;

       sin.sin_family          = AF_INET;
       sin.sin_addr.s_addr     = inet_addr("255.255.255.255");
       sin.sin_port            = htons(27155);

       sd = socket(AF_INET, SOCK_DGRAM, 0);
       if (sd < 0)
               perror("socket");

       val = 1;
       ret = setsockopt(sd, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val));
       if (ret < 0)
       {
               perror("setsockopt");
               exit(1);
       }

       ret = sendto(sd, "gstsearch", 9, 0,(struct sock_addr *) &sin, sizeof(struct sockaddr));
       if (ret < 0)
       {
               perror("sendto");
               exit(1);
       }

       ret = read(sd,&rcvbuffer,sizeof(rcvbuffer));

       printf("Type            : %s\n",ans->type);
       printf("Announced Name  : %s\n",ans->name);
       printf("Admin Username  : %s\n",ans->user);
       printf("Admin Password  : %s\n",ans->pass);

       return 0;
}

<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

guifego

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ayuda Para Compilar
« Respuesta #3 en: Lunes 15 de Noviembre de 2004, 19:58 »
0
mira esto lo que me sale

--------------------Configuration: 900ap - Win32 Debug--------------------
Compiling...
900ap.c
c:\documents and settings\guifego\escritorio\900ap\900ap.c(2) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
Error executing cl.exe.

900ap.exe - 1 error(s), 0 warning(s)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Para Compilar
« Respuesta #4 en: Martes 16 de Noviembre de 2004, 00:18 »
0
reinstala tu compilador.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

guifego

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ayuda Para Compilar
« Respuesta #5 en: Martes 16 de Noviembre de 2004, 01:14 »
0
ya e buelto a instalar


yo uso el visual studio,, me an dicho que me faltan unos cd que se llaman msdn que son los que tienen la librerias,,,,,
eso puede ser

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Para Compilar
« Respuesta #6 en: Martes 16 de Noviembre de 2004, 01:23 »
0
se es el problema,
el codigo que has colocado es para manejar sockets bajo linux o en un entorno compatible con el gcc, es decir para compilar eso en windows tienes opciones como usar el compildor dgjpp o el emulador cygwin.

Si quieres  usar sockets desde visual studio, que pertence al entornode programacion de windows entonces  no debes usar sockets, sino winsockets, es de hecho mas facil que usar losockets pero deberas aprenderlos tambien.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

nrvz

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Ayuda Para Compilar
« Respuesta #7 en: Domingo 30 de Abril de 2006, 18:32 »
0
Para evitar crear una nueva discucion, les planteo esto aqui nomás...

Estoy aprendiendo a programar el winsock en, obviamente, C/C++. Uso el entorno Dev-C++ y me da error en el linker, he buscado al solucion y segun veo el problema es que una funcion esta declarada pero no esta definida en las cabeceras pero nose de donde sacar lo que me falta.

¿Que compilador me recomiendan para programar el winsock?

Gracias.
_____________________________________
Guillermo Narváez
Estudiante Ing. en Sistemas
Argentina

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Para Compilar
« Respuesta #8 en: Domingo 30 de Abril de 2006, 18:37 »
0
Cita de: "JuanK"
se es el problema,
el codigo que has colocado es para manejar sockets bajo linux o en un entorno compatible con el gcc, es decir para compilar eso en windows tienes opciones como usar el compildor dgjpp o el emulador cygwin.

Si quieres  usar sockets desde visual studio, que pertence al entornode programacion de windows entonces  no debes usar sockets, sino winsockets, es de hecho mas facil que usar losockets pero deberas aprenderlos tambien.
por esto mismo.


puedes usar el vs 2005 si vas a programar bajo windows, pero e este caso no te funcionaria un programa como el de arriba, tendrias que usar winsocket.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

nrvz

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Ayuda Para Compilar
« Respuesta #9 en: Domingo 30 de Abril de 2006, 18:46 »
0
¿Conoces algun entorno libre?
El VisualStudio 2005 es propiertario, aunque la pirateria nunca falta, preferiria hacerlo bajo un entorno libre.

Gracias.
_____________________________________
Guillermo Narváez
Estudiante Ing. en Sistemas
Argentina