no lo mire entero pero hay un if mal, revisalo
" if (operacionx<5)" eso es si operacionx es menor que 5 no que 0
" if (operacionx<5)" eso es si operacionx es menor que 5 no que 0
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
int main (void)
{
int sockfd,leido, longitud, total=0;
struct addrinfo datos, *GuardarDatos;
char *cadena;
memset(&datos, '0', sizeof(struct addrinfo));
datos.ai_family=AF_INET;
datos.ai_socktype=SOCK_STREAM;
datos.ai_protocol=0;
datos.ai_flags=AI_PASSIVE;
getaddrinfo("192.168.xxx.xxx","9000", &datos, &GuardarDatos);
sockfd=socket(GuardarDatos->ai_family, GuardarDatos->ai_socktype, GuardarDatos->ai_protocol);
if(sockfd == -1)
{
printf("\nError al abrir el socket (funcion socket)\n");
return -1;
}
if(connect(sockfd, GuardarDatos->ai_addr, GuardarDatos->ai_addrlen) == -1)
{
printf("\nConexion fallida (fallo en connect)\n");
return -1;
}
leido=recv(sockfd, &longitud, sizeof(int), 0);
if (leido == 0)
{
printf("\nError se ha hallado el socket cerrado\n al intentar obtener la longitud del mensaje\n");
return -1;
}
cadena=(char *)malloc(longitud);
while(longitud < total)
{
leido=recv(sockfd, &cadena[total], longitud-total, 0);
total=total+leido;
if (leido == 0)
{
printf("\nError se ha hallado el socket cerrado\n al intentar obtener el mensaje\n");
return -1;
}
}
printf("\nEl mensaje es: %s\n", cadena);
free (cadena);
freeaddrinfo(GuardarDatos);
close(sockfd);
printf("\nPulse una tecla para finalizar\n");
fflush(stdin);
getchar();
return 0;
}
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<errno.h>
int main(void)
{
int sockfd, acceptfd, total=0, escrito;
struct addrinfo datos, *GuardarDatos;
struct sockaddr_in cliente;
socklen_t TamanoCliente=sizeof(struct sockaddr_in);
char *cadena=(char *)malloc(12);
ssize_t lcadena;
memset(&datos, 0, sizeof(struct addrinfo));
memset(GuardarDatos, 0, sizeof(struct addrinfo));
printf("\nPor favor intoduzca la cadena a enviar:");
fgets(cadena,12*sizeof(char),stdin);
printf("\n");
lcadena=strlen(cadena);
datos.ai_socktype=SOCK_STREAM;
datos.ai_family=AF_INET;
datos.ai_protocol=0;
datos.ai_flags=AI_PASSIVE;
getaddrinfo("192.168.xxx.xxx","9000",&datos,&GuardarDatos);
sockfd=socket(datos.ai_family, datos.ai_socktype, datos.ai_protocol);
if (sockfd == -1)
{
printf("\nerror en socket\n");
return -1;
}
if(bind(sockfd, GuardarDatos->ai_addr, GuardarDatos->ai_addrlen)==-1)
{
printf("\nerror en bind\n");
return -1;
}
printf("\nPoniendo socket a la escucha...\n");
if(listen(sockfd, 1)==-1)
{
printf("\nerror en listen\n");
return -1;
}
acceptfd=accept(sockfd, (struct sockaddr*)&cliente, &TamanoCliente);
if(acceptfd==-1)
{
printf("\nerror en accept\n");
return -1;
}
escrito=send(sockfd, &lcadena, 1, 0);
if (escrito == 0)
{
printf("\nError, no se ha podido mandar el mensaje\n");
return -1;
}
while(total<leido)
{
escrito=send(sockfd, &cadena[total], lcadena-total, 0);
total=total + escrito;
}
printf("\ndespues del while\n");
if(leido > lcadena)
{
printf("\nError, no se ha podido enviar la cadena completa\n");
return -1;
}
close(sockfd);
printf("\nSe ha enviado su caracter correctamente\nPulse una tecla para finalizar\n");
fflush(stdin);
getchar();
return 0;
}
Citaren caso de que el tamaño de la memoria reservada (malloc no inicializa a nada) sea igual al largo de la cadena si...
Citarla respuesta es claramente obvia ... haz ese printf y adios duda.