i always getting crash issue when trying to receive string value from TCP Server-Client, can someone fix it??
struct request_data_t {
int Mode;
bool boolean;
int value;
std::string fileName;
std::string content;
};
size_t TCPServer::receive(void *outData) {
uint32_t length = 0;
int code = receive_data(&length, sizeof(uint32_t));
if (code > 0) {
length = ntohl(length);
receive_data(outData, static_cast<size_t>(length));
}
return length;
}
int TCPServer::receive_data(void *outData, size_t size) {
char *buffer = static_cast<char *>(outData);
int numReceived = 0;
while (size) {
do {
numReceived = read(new_socket, buffer, size);
} while (numReceived == -1 && errno == EINTR);
if (numReceived <= 0) {
close(server_fd);
break;
}
size -= numReceived;
buffer += numReceived;
}
return numReceived;
}
size_t TCPServer::send(void *inData, size_t size) {
uint32_t length = htonl(size);
int code = send_data(&length, sizeof(uint32_t));
if(code <= 0){
return 0;
}
return send_data(inData, size);
}
size_t TCPServer::send_data(void *inData, size_t size) {
char *buffer = static_cast<char *>(inData);
int numSent = 0;
while (size) {
do {
numSent = write(new_socket, buffer, size);
} while (numSent == -1 && errno == EINTR);
if (numSent <= 0) {
close(server_fd);
break;
}
size -= numSent;
buffer += numSent;
}
return numSent;
}
void TCPServer::SendData(int Mode, bool boolean, int value, const char* fileName, const char* content) {
request_data_t request{};
request.Mode = Mode;
request.boolean = boolean;
request.value = value;
request.fileName = fileName;
request.content = content;
send((void*)&request,sizeof(request));
}
i want it able to send string value and then able to receive the string, i want the result looks like this
TCPServer server; server.SendData(11, true, 20, "test.txt", "hello");
TCPClient client;
request_data_t2 received_data; client.receive((void *)&received_data);
LOGD("fileName: %s", received_data.fileName.c_str()); // but always crash here when i try to call received_data.fileName and received_data.content