Programación General > C/C++
Problema con SOCKET/LINUX
(1/1)
fachamix:
Tengo el siguiente codigo, un simple servidor usando sockets sobre linux.
al momento de hacer el "write" se termina la conexion ... y me canse de revisar el codigo. Me duele la cabeza.
aqui el bendito codigo.
--- Código: C ---#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <netinet/in.h>#include <arpa/inet.h> int main(){ printf("Iniciando servidor ...\n\r"); int server_sockfd, client_sockfd; struct sockaddr_in server_dir, client_dir; int server_len, client_len; char buffer[1024]; server_sockfd = socket(AF_INET, SOCK_STREAM, 0); server_dir.sin_family = AF_INET; server_dir.sin_addr.s_addr = inet_addr("10.0.0.4"); server_dir.sin_port = htons(9981); server_len = sizeof(server_dir); bind(server_sockfd,(struct sockaddr*)(&server_dir),server_len); listen(server_sockfd,5); while (1) { printf("Esperando clientes ...\n\r"); client_len = sizeof(client_dir); client_sockfd = accept(server_sockfd,(struct sockaddr*)&client_dir,(socklen_t*)&client_len); if (client_sockfd == -1) { perror("DEBUG"); exit(EXIT_FAILURE); } printf("Cliente conectado, esperando datos ...\n\r"); while (1) { memset(buffer,'\0',sizeof(buffer)); int temp = read(client_sockfd,buffer,sizeof(buffer)); buffer[strlen(buffer) - 2] = '\0'; printf("Leidos %d \n\r",temp); printf("Datos recibidos [%s]\n\r",buffer); if (strcmp(buffer,"quit") == 0) { break; } printf("Enviando respuesta de ECHO\n\r"); //ESTO SI SE EJECUTA strcpy(buffer,"DATOS-RECIBIDOS"); //ESTO TAMBIEN write(server_sockfd,buffer,sizeof(buffer)); //CREO QUE AQUI ESTA EL ERROR, //HACE QUE SE TERMINE EL PROGRAMA ABRUPTAMENTE } close(client_sockfd); printf("Fin de conexion.\n\r"); } close(server_sockfd); exit(EXIT_SUCCESS);}
para probar este codigo , ejecuto este servidor, y para el cliente uso TELNET apuntando a la IP.
Logro conectarme y mandar un paquete, pero automaticamente el programa termina abruptamente.
gracias por su ayuda.
fachamix:
old: write(server_sockfd,buffer,sizeof(buffer));
new: write(client_sockfd,buffer,strlen(buffer));
SOLVED!
Navegación
Ir a la versión completa