elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:55  


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema con sockets WinSock2
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con sockets WinSock2  (Leído 1,491 veces)
naderST


Desconectado Desconectado

Mensajes: 467



Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #15 en: 26 Septiembre 2011, 22:13 »

En el cliente nunca le asignas ningún contenido a la variable Buffer, de esta manera:

Cliente:
Código
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
 
#define PORT 9999
 
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
 
int Error()
{
std::cout << "Error " << GetLastError() << std::endl;
getchar();
return 0;
}
 
int main(void)
{
   if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
{
Error();
}
 
Remote_Server.sin_family = AF_INET;
Remote_Server.sin_port = htons(PORT);
Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
 
Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 
Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr));
 
if(Conexion == INVALID_SOCKET)
{
Error();
}
 
char buffer[] = "Hola";
send(Client,buffer,strlen(buffer),0);
 
return 0;
}
 

Y lo recibes mal no le puedes hacer strlen() a Buffer

Servidor:
Código
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
 
#define PORT 9999
 
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
 
int Error()
{
std::cout << "Error " << GetLastError() << std::endl;
getchar();
return 0;
}
 
int main(void)
{
   if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
{
Error();
}
 
Remote_Server.sin_family = AF_INET;
Remote_Server.sin_port = htons(PORT);
Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
 
Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 
Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server));
listen(Client,10);
accept(Client,NULL,NULL);
char *Buffer = (char*)malloc(5);
while(true)
{
 
memset(Buffer, 0, 5);
recv(Client,Buffer,4,0);
if(!strcmp(Buffer,"Hola"))
{
break;
}
 
}
std::cout << Buffer <<std::endl;
getchar();
free(Buffer);
return 0;
}

PD: Recuerda que strcmp() devuelve 0 si las cadenas son iguales.


En línea
Riki_89D


Desconectado Desconectado

Mensajes: 848


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #16 en: 26 Septiembre 2011, 22:24 »

Hola,acabo de probar los codigo,pero no recibe nad ale servidor....:S se queda con la pantalla negra


En línea
naderST


Desconectado Desconectado

Mensajes: 467



Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #17 en: 26 Septiembre 2011, 22:36 »

No me había fijado pero estás aceptando mal la conexión... en la parte donde llamas a la función accept() deberías hacer algo así:

Código
SOCKET nueva_conex;
do{
nueva_conex = accept(Client, NULL,NULL);
}while(nueva_conex == SOCKET_ERROR);

Y en esta parte en el servidor deberías cambiarla así:

Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);

por

Remote_Server.sin_addr = INADDR_ANY;

Edit:

Recuerda que cuando llames accept() te devolverá una variable tipo SOCKET que es la nueva conexión que acabas de aceptar y esa variable es la que utilizarás para enviar/recibir los datos.
En línea
Riki_89D


Desconectado Desconectado

Mensajes: 848


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #18 en: 27 Septiembre 2011, 10:33 »

Hola,el servidor no me dja poner "Remote_Server.sin_addr = INADDR_ANY;"

me da error en donde esta el "="


ERROR:
error C2679: '=' binario : no se encontró un operador que adopte un operando en la parte derecha de tipo 'u_long'
En línea
naderST


Desconectado Desconectado

Mensajes: 467



Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #19 en: 27 Septiembre 2011, 19:52 »

Disculpa es así:

Remote_Server.sin_addr.s_addr = INADDR_ANY;

O sino:

Remote_Server.sin_addr.S_un.S_addr = INADDR_ANY;
En línea
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con sockets y PHP
Programación General
eLank0 2 488 Último mensaje 29 Julio 2005, 22:03
por pepel
Fallo al compilar usando winsock2.h « 1 2 »
Programación C/C++
Solid19 15 2,658 Último mensaje 15 Marzo 2006, 00:13
por Solid19
problema con sockets...
Programación C/C++
vacio 4 545 Último mensaje 4 Julio 2006, 07:47
por vacio
problema sockets
Programación C/C++
viruss1362 4 442 Último mensaje 30 Julio 2006, 23:01
por viruss1362
no se puede abrir el archivo 'Winsock2.lib'
Programación C/C++
YagamiIori2002 3 621 Último mensaje 9 Diciembre 2011, 23:03
por Eternal Idol
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines