Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda sockets

Estas en el tema de Ayuda sockets en el foro de C/C++ en Foros del Web. K esta mal en este code? me da error al compilar. Código: #include <stdio.h> #include <winsock.h> void main(void) { WORD wVersionRequested; WSADATA wsaData; wVersionRequested = ...
  #1 (permalink)  
Antiguo 08/08/2006, 14:43
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Ayuda sockets

K esta mal en este code? me da error al compilar.


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

void main(void)

{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);


struct sockaddr_in my_addr;
int s = socket(AF_INET,SOCK_STREAM,0);
my_addr.sin_family = AF_INET;
my_addr.sin_port =htons(80);         
my_addr.sin_addr.s_addr=inet_addr("66.102.9.104");
memset(&(my_addr.sin_zero),'\0',8);
if(connect(s, (struct sockaddr *)&my_addr, sizeof(struct sockaddr_in))==-1)
{
printf("error");
}
getchar();
}
Saludos.
  #2 (permalink)  
Antiguo 09/08/2006, 03:42
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
Que error te da?
  #3 (permalink)  
Antiguo 09/08/2006, 09:29
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Error E2140 prog.txt 13: Declaration is not allowed here in function main
Error E2140 prog.txt 14: Declaration is not allowed here in function main
*** 2 errors in Compile ***

Compilado en Borland c++ 5.5 for win32, nose si tendra algo k ver. Tn probe a compilarme con Dev-C++ y m compila, pero me da error al linkear. No se puede estar mal...
Saludos.
  #4 (permalink)  
Antiguo 10/08/2006, 03:18
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
Según dice te da error en la linea 13 y 14.
En la 13 te esta diciendo que no puedes declarar el struct dentro del main, debes declararlo fuera del main

En la 14 tambien dice que no puedes declarar eso ahí, pero yo lo veo correcto...
Quizá alguién que domine mas...
  #5 (permalink)  
Antiguo 10/08/2006, 19:31
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Hola! el problema es que como lo estas compilando en C TODAS las declaraciones deben ir al principio del cuerpo principal, en C++ las puedes poner donde gustes (siempre y cuando no viole alguna sintaxis)...

Coloca estas lineas:

struct sockaddr_in my_addr;
int s = socket(AF_INET,SOCK_STREAM,0);

Despues de :

wVersionRequested = MAKEWORD(1, 1);

Y problema resuelto....

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #6 (permalink)  
Antiguo 11/08/2006, 13:47
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Código:
#include <stdio.h>
#include <winsock.h>

void main(void)

{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1, 1);

struct sockaddr_in my_addr;
int s = socket(AF_INET,SOCK_STREAM,0);

WSAStartup(wVersionRequested, &wsaData);



my_addr.sin_family = AF_INET;
my_addr.sin_port =htons(80);         
my_addr.sin_addr.s_addr=inet_addr("66.102.9.104");
memset(&(my_addr.sin_zero),'\0',8);
if(connect(s, (struct sockaddr *)&my_addr, sizeof(struct sockaddr_in))==-1)
{
printf("error");
}
getchar();
}
Asi?¿ M sigue dando el mismo error...

Saludos.
  #7 (permalink)  
Antiguo 12/08/2006, 02:19
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
el errror podria ser que estas compilando como C++ y no como C, si fuera C te marcaria el error de la declaracion de int s y no de main.

puedes cambiar void main(void) por int main()

y agregar justao antes de cerrar la llave de main; return 0;
y al linkar, si estan en el DevC++, lincar con la libreria libwsock32.a

en el borland no se cual sea la libreria, imagino que la misma solo con la terminacion .lib,


al correlo me da errror, ahi si no se que decir.

Saludos.
  #8 (permalink)  
Antiguo 12/08/2006, 11:52
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Compilaba en borland, aunke tb lo intente en dev.. Puse lo de int main, pero me sigue dando el mismo error. Y lo q dijiste de incluir la libreria libwsock32.a, esa libreria no esta definida ya incluyendo el header winsock.h?¿

Saludos.
  #9 (permalink)  
Antiguo 13/08/2006, 02:28
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
te aclaro que yo lo he compilado en el DevC++ y me compila y linka bien, en el borland no he probado.


y no. cuando incluyes winsock.h tan solo estas agreagando a la compilacion, los prototipos de las funciones, y uno que otro typedef y constantes.

la implementacion de las funciones esta en las librerias, y estas tienen que agregarse al linkar tu programa.

en el Dev para linkar una libreria se hace esto:

dale en el menu/Proyecto/Opciones de proyecto/Parametros
ahi veras 3 listas. en la 3ra(la de la derecha).

tienes que escribir

-lwsock32
o
-lwsock32.a

OK.

y ya puedes compilar y linkar.

Saludos.
  #10 (permalink)  
Antiguo 13/08/2006, 05:05
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por Nivel7 Ver Mensaje
te aclaro que yo lo he compilado en el DevC++ y me compila y linka bien, en el borland no he probado.
Ese código es incorrecto en C, estás compilando como C++.
  #11 (permalink)  
Antiguo 13/08/2006, 05:06
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por _Lucifer_ Ver Mensaje
Hola! el problema es que como lo estas compilando en C TODAS las declaraciones deben ir al principio del cuerpo principal, en C++ las puedes poner donde gustes (siempre y cuando no viole alguna sintaxis)...

Coloca estas lineas:

struct sockaddr_in my_addr;
int s = socket(AF_INET,SOCK_STREAM,0);

Despues de :

wVersionRequested = MAKEWORD(1, 1);

Y problema resuelto....

Saludos
No: Winsock especifica que no puedes llamar a socket() antes que a WSAStartup();
  #12 (permalink)  
Antiguo 13/08/2006, 09:35
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Ya me funciona x lo menos en dev C++, en Borland c++, no me funciona, a pesar d k inclui la libreria,
"bcc32 example.cpp -o C:\Borland\bcc55\Lib\PSDK\wsock32.lib", asi q nose si eske no se si no la inlcui bien, o que no es esa...
Y porke hace falta incluir las librerias una vez k vas a linkear? Eske a mi nunca me izo falta incluirlas a la hora de linkear los programas, me bastaba con utilizar los ficheros de cabeceras correspodientes a las funciones q utilizaba, como stdio,stdlib,conio,system... y me likeaba sin problema. Es cierto k yo siempre utilice borland C++, nunca dev c++, pero deberia d ser independiente...

Saludos.
  #13 (permalink)  
Antiguo 13/08/2006, 13:00
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
Y porke hace falta incluir las librerias una vez k vas a linkear?
Porque eso es una librería: Algo que incluyes.

Borland lo linkeaba por ti, pero lo hacía aunque tú no lo vieses.
  #14 (permalink)  
Antiguo 13/08/2006, 13:01
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
"bcc32 example.cpp -o C:\Borland\bcc55\Lib\PSDK\wsock32.lib"
¿No es -l?
  #15 (permalink)  
Antiguo 13/08/2006, 13:04
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
pero deberia d ser independiente...
Lo es.
  #16 (permalink)  
Antiguo 13/08/2006, 13:13
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Creo k el compilador q tengo de Borland es solo para C.

Cita:
Originalmente publicado por N0vat0 Ver Mensaje
Y porke hace falta incluir las librerias una vez k vas a linkear?

Porque eso es una librería: Algo que incluyes.

Borland lo linkeaba por ti, pero lo hacía aunque tú no lo vieses.
Creo k no me entendiste. Me refiero a q.. xk he de incluir a mano, como en este caso, la libreria lwsock32, y no asi otras librerias k tienen implementadas las funciones declaradas por ej en el fichero de cabecera stdio?¿
  #17 (permalink)  
Antiguo 13/08/2006, 13:16
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
Creo k no me entendiste. Me refiero a q.. xk he de incluir a mano, como en este caso, la libreria lwsock32, y no asi otras librerias k tienen implementadas las funciones declaradas por ej en el fichero de cabecera stdio?¿
La librería estándar C o la de C++ se linkea sóla por defecto en cualquier compilador, puesto que en el 90% de los casos la vas a usar...

En el caso que no la necesites (para programación de kernels, módulos, DLLs, liberías externas, funciones aritméticas...), cada compilador tiene un modificador para no usarla.

Pero repito, es un caso harto raro.
  #18 (permalink)  
Antiguo 15/08/2006, 17:12
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 10 meses
Puntos: 0
Por curiosidad, como se llama la libreria estandar?¿
  #19 (permalink)  
Antiguo 05/01/2009, 04:02
 
Fecha de Ingreso: diciembre-2008
Mensajes: 49
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Ayuda sockets

creo que te falta alguna libreria porque a mi me sale el mismo error. Voy a investigar un poco mas y te digo si me sale. Pero va a ser porque falta algun include ya veras
  #20 (permalink)  
Antiguo 07/01/2009, 14:28
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 16 años
Puntos: 3
Respuesta: Ayuda sockets

a mi en el Dev-cpp me funciona bien (compilando como c++) haciendo esto:
Cita:
#include <stdio.h>
#include <winsock.h>

int main(void)

{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1, 1);

struct sockaddr_in my_addr;
int s = socket(AF_INET,SOCK_STREAM,0);

WSAStartup(wVersionRequested, &wsaData);



my_addr.sin_family = AF_INET;
my_addr.sin_port =htons(80);
my_addr.sin_addr.s_addr=inet_addr("66.102.9.104");
memset(&(my_addr.sin_zero),'\0',8);
if(connect(s, (struct sockaddr *)&my_addr, sizeof(struct sockaddr_in))==-1)
{
printf("error");
}
getchar();
}
Eso si debes poner en el linker -lwsock32
(y Obviamente tener la libreria winsock)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:33.