Obtención de segfault debido a la variable del tipo de datos de cadena en el servidor PROTOBUF y la comunicación con el cliente a través de sockets en el final de recuperación en cpp

Cuando estoy enviando una variable de protobuf a través de la comunicación de socket en el final de la versión de recuperación, estoy tratando de mostrar la variable de cadena de protobuf. Tengo una segmentación en este tipo de datos restante que no sea la cadena. en la cadena de datos de Protobuf error de segmentación distinto al que tenemos cualquier otro tipo de datos para almacenar el tipo de datos de cadena.

Creo un example.proto con el nombre de la variable de cadena. Ahí compilo example.proto con el compilador protoc (protoc example.proto --cpp_out <path>) crea dos archivos dos archivos example.pb.h, example.pb.cc Al usar estos archivos creo un test_server.cpp y test_client.cpp y lo compilo. pero en el momento en que ambos programas se ejecutaban, envié una variable protobuf en el lado de recuperación, lo que provocó un fallo de segmentación debido a que intenté mostrar la variable de cadena.

¿Como puedó resolver esté problema?

ejemplo.proto

package data;
message  star
{ optional string name=1; }

server.cpp

#include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<strings.h>
#include<string.h>
#include <arpa/inet.h>
#include"example.pb.h"
#include"example.pb.cc"

int main() 
{ 
    int sd,csd;
    sd=socket(AF_INET, SOCK_STREAM,0);
    perror("socket");
    sockaddr_in ser,cli;
    ser.sin_family=AF_INET;
    ser.sin_port=htons(7878);
    ser.sin_addr.s_addr=inet_addr("X.Y.Z.A");
    bzero(ser.sin_zero, 8);
    size_t s=16;

    if(bind(sd,(struct sockaddr *)&ser, s)==-1)
        cout<<"Bind FAIL\n";
    else
        cout<<"Bind Success\n";

    if((csd=accept(sd,(struct sockaddr *)&cli, &s))==-1)
        cout<<"Connection Accept FAIL\n";
    else
        cout<<"ConnectioN Accept Success\n";

    star pkt;
    recv(csd,&pkt,sizeof(pkt),0);
    cout<<"\t String Name: "<<pkt.name<<endl; //Here only i get segmentation
    close(sd);
    close(csd);
}

client.cpp

#include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<strings.h>
#include<string.h>
#include <arpa/inet.h>
#include"example.pb.h"
#include"example.pb.cc"

int main()
{
    int sd;
    sd=socket(AF_INET, SOCK_STREAM,0);
    perror("socket");
    sockaddr_in ser;
    ser.sin_family=AF_INET;
    ser.sin_port=htons(7878);
    ser.sin_addr.s_addr=inet_addr("X.Y.Z.A");
    bzero(ser.sin_zero, 8);

    if(connect(sd,(struct sockaddr *)&ser, 16)==-1)
        cout<<"connect FAIL\n";
    else
        cout<<"connect Success\n";

    star pkt;
    pkt.set_name("Pratap");
    cout<<"Send Data without help of another variable....\n";
    send(sd,&pkt,sizeof(pkt) ,MSG_CONFIRM);
    close(sd);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta