Я пытаюсь передать структурную переменную через TCP-соединение, но я не могу понять, в чем проблема. Я получаю команду переменных и id, но когда я читаю переменные имени пользователя (и те, что после), printf не дает никаких результатов.C - Связь сокета (TCP)
typedef struct _msg{ // 4+4+20+20+44+200+8=300
int command;
int id;
char username[20];
char password[20];
char subject[44];
char text[200];
time_t timestamp;
} msg;
msg* get_msg(int client_socket){
char *auxString= (char*) calloc (1, sizeof(time_t));
msg *auxMsg= (msg*) calloc(1,sizeof(msg));
read(client_socket, auxString , sizeof(auxMsg->command));
auxMsg->command=strtol(auxString,NULL,10);
printf("%d\n", auxMsg->command);
read(client_socket, auxString, sizeof(auxMsg->id));
auxMsg->id=strtol(auxString,NULL,10);
printf("%d\n", auxMsg->id);
read(client_socket, auxMsg->username, sizeof(auxMsg->username));
printf("%s\n", auxMsg->username);
read(client_socket, auxMsg->password, sizeof(auxMsg->password));
printf("%s\n", auxMsg->password);
read(client_socket, auxMsg->subject, sizeof(auxMsg->subject));
printf("%s\n", auxMsg->subject);
read(client_socket, auxMsg->text, sizeof(auxMsg->text));
printf("%s\n", auxMsg->text);
read(client_socket, auxString , sizeof(auxMsg->timestamp));
auxMsg->timestamp=strtol(auxString,NULL,10);
printMsg(auxMsg);
return auxMsg;
}
int send_msg(int client_socket, int command, int id, char* username, char* password, char*subject, char*text, time_t timestamp){
char* auxString=(char*) calloc (1,sizeof(time_t));
sprintf(auxString,"%d",command);
write(client_socket,auxString,sizeof(int));
sprintf(auxString,"%d",id);
write(client_socket,auxString,sizeof(int));
write(client_socket,username,sizeof(username));
write(client_socket,password,sizeof(password));
write(client_socket,subject,sizeof(subject));
write(client_socket,text,sizeof(text));
sprintf(auxString,"%d",command);
write(client_socket, auxString, sizeof(time_t));
return SUCCESS;
}
Возможно, вам следует показать определение вашей структуры? – Alnitak
Вы должны ** действительно ** заботиться о том, что 'read()' и 'write()' return! Прочитайте документацию по этому вопросу! – alk
TCP - это поток, он ничего не знает о сообщениях. Не ожидайте, что число чтений, необходимое для получения, будет соответствовать количеству записей, отправленных для отправки. – alk