Título: Sockets linux
Publicado por: Poyoncio 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: #include <iostream> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <unistd.h> using namespace std; int linux_socket_serv(int portNum, int bufsize = 1024) { int client, server; bool isExit = false; char buffer[bufsize]; struct sockaddr_in server_addr; socklen_t size; //Init socket client = socket(AF_INET, SOCK_STREAM, 0); if (client < 0) { cout << "[-] Error creando socket... " << endl; exit(1); } cout << "[+] Socket creado correctamente... " << endl; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htons(INADDR_ANY); server_addr.sin_port = htons(portNum); //Conectando sockets if (bind(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { cout << "[-] Error conectando sockets... " << endl; exit(1); } size = sizeof(server_addr); cout << "[+] Esperando clientes... " << endl; //Esperando clientes listen(client, 3); //Aceptar cliente server = accept(client, (struct sockaddr*)&server_addr, &size); if (server < 0) { cout << "[-] Error aceptando cliente... " << endl; exit(1); } strcpy(buffer, "Servidor conectado..."); send(server, buffer, bufsize, 0); cout << "[+] Conectado con cliente... " << endl; recv(server, buffer, bufsize, 0); close(client); return 0; } int main() { linux_socket_serv(1500,1024); return 0; }
y aqui el cliente: #include <iostream> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <unistd.h> #include <netdb.h> using namespace std; int linux_socket_clie(int portNum, char* ip, int bufsize = 1024) { int client, server; bool isExit = false; char buffer[bufsize]; struct sockaddr_in server_addr; //Init socket client = socket(AF_INET, SOCK_STREAM, 0); if (client < 0) { cout << "[-] Error creando sockets... " << endl; exit(1); } cout << "[+] Socket creado... " << endl; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(portNum); //Conectando sockets if (connect(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) == 0) { cout << "[+] Conectando con el servidor... " << endl; } cout << recv(client, buffer, bufsize, 0); cout << "[+] Conexion confirmada... " << endl; cin >> buffer; send(client, buffer, bufsize, 0); return 0; } int main() { linux_socket_clie(1500, "127.0.0.1", 1024); return 0; }
El programa se queda parado en: Servidor: - Socket creado correctamente...
- Esperando clientes...
Cliente:
Título: Re: Sockets linux
Publicado por: ivancea96 en 11 Septiembre 2016, 18:04 pm
En el cliente, no le pones la dirección IP? No estás usando el parámetro.
Título: Re: Sockets linux
Publicado por: Poyoncio 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? if (connect(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) == 0)
Título: Re: Sockets linux
Publicado por: ivancea96 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 (http://es.tldp.org/Tutoriales/PROG-SOCKETS/prog-sockets.html)
Ve directamente al código del cliente, abajo, si quieres.
Título: Re: Sockets linux
Publicado por: Poyoncio 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 (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 ;-)
Título: Re: Sockets linux
Publicado por: Poyoncio 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: server_addr.sin_addr = *((struct in_addr *)he->h_addr); 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
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
Título: Re: Sockets linux
Publicado por: ivancea96 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.
|