Recurro a vosotros un poco desesperado ya que, actualmente, estoy intentando resolver dos códigos fuente que a continuación os adjunto sobre sockets. Nótese que estoy programando en entorno Linux.
El problema en cuestión es un aviso de violación de segmento que no sé de dónde viene. Os dejo los códigos a ver si podéis vosotros ver el fallo...
He aquí el código del proceso que actúa como servidor:
Código C:
Ver original
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <errno.h> #include <netdb.h> #include <strings.h> #include <netinet/in.h> #include <string.h> #define PUERTO 2500 #define MAX 4 int main(void){ socklen_t fd1, fd2; struct sockaddr_in sock, sock2; char *mess="Bienvenido"; int puto_bind, tam; if((fd1=socket(AF_INET, SOCK_STREAM, 0))==-1){ } sock.sin_family=AF_INET; sock.sin_port=htons(PUERTO); sock.sin_addr.s_addr=inet_addr("127.0.0.1"); bzero(&(sock.sin_zero), sizeof(sock)); puto_bind=bind(fd1, (struct sockaddr *)&sock, sizeof(sock)); if(puto_bind==-1){ } if(listen(fd1, MAX)==-1){ } while(1){ tam=sizeof(sock2); if((fd2=accept(fd1, (struct sockaddr *)&fd2, &tam))==-1){ } inet_ntoa(sock2.sin_addr.s_addr); close(fd2); } close(fd1); }
Y aquí el código del proceso que actúa como cliente:
Código C:
Ver original
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <errno.h> #include <netdb.h> #include <strings.h> #include <netinet/in.h> #define PUERTO 2500 int main(void){ socklen_t fd; int num; char *buffer; struct sockaddr_in sock; if((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){ } sock.sin_family=AF_INET; sock.sin_port=htons(PUERTO); sock.sin_addr.s_addr=inet_addr("127.0.0.1"); bzero(&(sock.sin_zero), sizeof(sock)); if(connect(fd, (struct sockaddr *)&sock, sizeof(sock))==-1){ } if((num=recv(fd, buffer, 1024, 0))==-1){ } buffer[num]='\0'; close(fd); }
Un abrazo.
P. D: Por si hay dudas, estoy intentando mandar una cadena que contiene un mensaje desde el servidor hasta el cliente y que este último la muestre por pantalla.