elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Sockets linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sockets linux  (Leído 2,365 veces)
Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Sockets linux
« en: 10 Septiembre 2016, 16:40 pm »

Bueno estoy programando en C++ y no consigo que los sockets intercanvien mensajes, es decir que envio algo y no se muestra nada por pantalla.
E probado con ponerle cout delante de recv pero no se muestra nada, aqui el codigo:
Servidor:
Código
  1. #include <iostream>
  2. #include <string.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9.  
  10. using namespace std;
  11.  
  12. int linux_socket_serv(int portNum, int bufsize = 1024)
  13. {
  14. int client, server;
  15. bool isExit = false;
  16. char buffer[bufsize];
  17.  
  18. struct sockaddr_in server_addr;
  19. socklen_t size;
  20.  
  21. //Init socket
  22.  
  23. client = socket(AF_INET, SOCK_STREAM, 0);
  24.  
  25. if (client < 0)
  26. {
  27. cout << "[-] Error creando socket... " << endl;
  28. exit(1);
  29. }
  30.  
  31. cout << "[+] Socket creado correctamente... " << endl;
  32.  
  33. server_addr.sin_family = AF_INET;
  34. server_addr.sin_addr.s_addr = htons(INADDR_ANY);
  35. server_addr.sin_port = htons(portNum);
  36.  
  37. //Conectando sockets
  38.  
  39. if (bind(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0)
  40. {
  41. cout << "[-] Error conectando sockets... " << endl;
  42. exit(1);
  43. }
  44. size = sizeof(server_addr);
  45. cout << "[+] Esperando clientes... " << endl;
  46.  
  47. //Esperando clientes
  48.  
  49. listen(client, 3);
  50.  
  51. //Aceptar cliente
  52.  
  53. server = accept(client, (struct sockaddr*)&server_addr, &size);
  54.  
  55. if (server < 0)
  56. {
  57. cout << "[-] Error aceptando cliente... " << endl;
  58. exit(1);
  59. }
  60.  
  61. strcpy(buffer, "Servidor conectado...");
  62.  
  63.  
  64. send(server, buffer, bufsize, 0);
  65.  
  66. cout << "[+] Conectado con cliente... " << endl;
  67. recv(server, buffer, bufsize, 0);
  68.  
  69. close(client);
  70. return 0;
  71. }
  72.  
  73. int main()
  74. {
  75. linux_socket_serv(1500,1024);
  76. return 0;
  77. }
  78.  

y aqui el cliente:
Código
  1. #include <iostream>
  2. #include <string.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <netdb.h>
  10.  
  11. using namespace std;
  12.  
  13. int linux_socket_clie(int portNum, char* ip, int bufsize = 1024)
  14. {
  15. int client, server;
  16. bool isExit = false;
  17. char buffer[bufsize];
  18.  
  19. struct sockaddr_in server_addr;
  20.  
  21. //Init socket
  22.  
  23. client = socket(AF_INET, SOCK_STREAM, 0);
  24.  
  25. if (client < 0)
  26. {
  27. cout << "[-] Error creando sockets... " << endl;
  28. exit(1);
  29. }
  30.  
  31. cout << "[+] Socket creado... " << endl;
  32.  
  33. server_addr.sin_family = AF_INET;
  34. server_addr.sin_port = htons(portNum);
  35.  
  36.  
  37.  
  38.  
  39. //Conectando sockets
  40.  
  41. if (connect(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) == 0)
  42. {
  43. cout << "[+] Conectando con el servidor... " << endl;
  44. }
  45.  
  46. cout << recv(client, buffer, bufsize, 0);
  47. cout << "[+] Conexion confirmada... " << endl;
  48. cin >> buffer;
  49. send(client, buffer, bufsize, 0);
  50. return 0;
  51. }
  52.  
  53.  
  54.  
  55.  
  56. int main()
  57. {
  58. linux_socket_clie(1500, "127.0.0.1", 1024);
  59. return 0;
  60. }
  61.  

El programa se queda parado en:


Servidor:

  • Socket creado correctamente...
  • Esperando clientes...

Cliente:

  • Socket creado...


« Última modificación: 10 Septiembre 2016, 16:43 pm por Poyoncio » En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sockets linux
« Respuesta #1 en: 11 Septiembre 2016, 18:04 pm »

En el cliente, no le pones la dirección IP? No estás usando el parámetro.


En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: Sockets linux
« Respuesta #2 en: 11 Septiembre 2016, 18:20 pm »

En el cliente, no le pones la dirección IP? No estás usando el parámetro.
Es verdad, lo que ahora nose, es dondo tengo que situar la direccion ip, puede ser que tenga que situarlo en  en struct sockaddr*)&server?
Código
  1. if (connect(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) == 0)
En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sockets linux
« Respuesta #3 en: 11 Septiembre 2016, 18:50 pm »

En la estructura sí. Mira esta página, por ejemplo: http://es.tldp.org/Tutoriales/PROG-SOCKETS/prog-sockets.html

Ve directamente al código del cliente, abajo, si quieres.
En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: Sockets linux
« Respuesta #4 en: 11 Septiembre 2016, 18:57 pm »

En la estructura sí. Mira esta página, por ejemplo: http://es.tldp.org/Tutoriales/PROG-SOCKETS/prog-sockets.html

Ve directamente al código del cliente, abajo, si quieres.
Si, esa pagina la e estado mirando un rato, ahora e un codigo de otra pagina, ya se mas o menos la estructura basica de los sockets, asi que moldeare un poco a mi gusto y ya lo pasare por aqui  ;-)
En línea

Curso de ensamblador desde cero
Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: Sockets linux
« Respuesta #5 en: 11 Septiembre 2016, 20:13 pm »

Bueno estuve buscando un poco, y el problema no es tan sencillo, el problema esta en que no defini 2 variables de la estructura server_addr

me falta por declarar:
Código
  1. server_addr.sin_addr = *((struct in_addr *)he->h_addr);  
  2. bzero(&(server_addr.sin_zero),sizeof(server_addr); //Este lo tengo a medias, si no lo entiendo mal rellena con ceros server_addr.sin_zerp (no lo tengo demasiado claro
  3.  
El problema es que busco codigos similares y cada uno me sale distinto y ya nose que puedo tener, mi idea es poner server_addr.sin_addr = a la ip pero hay que hacer varios procedimientos que no entiendo

La parte de bzero tampoco lo tengo del todo claro, porque en el codigo original ponia en vez de poner server_addr ponia solo 8 y me ha dejado sin entender 
 
« Última modificación: 11 Septiembre 2016, 20:14 pm por Poyoncio » En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sockets linux
« Respuesta #6 en: 11 Septiembre 2016, 20:32 pm »

En el cliente de la página esa tienes el programa completo y correcto. Mira la parte que te falta en él, y fíjate en qué hace.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
sockets en linux
Programación C/C++
adri041289 1 2,012 Último mensaje 3 Junio 2010, 10:10 am
por pizarron
Problema con sockets en Linux
Programación C/C++
Warlox 5 4,270 Último mensaje 22 Enero 2011, 13:43 pm
por Garfield07
Problema con sockets en linux
Programación C/C++
DaniekL 3 2,138 Último mensaje 6 Marzo 2013, 19:31 pm
por 0xDani
Problema con linux sockets en c
Programación C/C++
jomoza 0 2,020 Último mensaje 14 Marzo 2015, 21:49 pm
por jomoza
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines