ciao, mi da errore su questa linea
e non capisco il perchè, dovrebbe essere giusto.
ora mi spiego un po meglio cosa devo fare, ora che ho i file.
Devo trasformare questa struttura C
codice:
/*
*libreria per la definizione della struttura messaggio
*/
#ifndef MSG_H
#define MSG_H
#define MSG_LOGIN 'L' //LOGIN
#define MSG_REGLOG 'R' //Register and Login
#define MSG_OK 'O' //OK
#define MSG_ERROR 'E' //Error
#define MSG_SINGLE 'S' //Message to single user
#define MSG_BRDCAST 'B' //Message broadcasted
#define MSG_LIST 'I' //List
#define MSG_LOGOUT 'X' //Logout
typedef struct {
char type ; // message type
char * sender ; // message sender
char * receiver ; // message receiver
unsigned int msglen ; // message length
char * msg ; // message buffer
} msg_t;
#endif
in una classe Java.
Sto realizzando un applicazione android che deve comunicare con un programma client-server già esistente. ti posto il codice della funzione C per leggere e scrivere i messaggi. perchè ho alcuni dubbi che possa essere letta una stringa normale, sono un pò arrugginito di C.
codice:
/*
* libreria per la realizzazione delle funzioni read_msg e write_msg
* necessarie per lo scambio di struct msg_t attraverso il socket
*/
#ifndef RW_H
#define RW_H
#include "msg.h"
int read_msg(msg_t *M,int csd){
/* legge il messaggio dal socket,
ogni campo ricevuto separatamente viene memorizzato nella struttura M*/
char num[4];
/*read message type*/
if(read( csd, &(M->type) , sizeof(char)) < 0) {
perror("ERROR: reading msg type: ");
return 1;
}
/*read sender*/
if(read( csd, M->sender , sizeof(char)*256) < 0) {
perror("ERROR: reading msg sender: ");
return 1;
}
/*read receiver*/
if(read( csd, M->receiver , sizeof(char)*256) < 0) {
perror("ERROR: reading msg receiver: ");
return 1;
}
/*read message len*/
if(read( csd, num , sizeof(char)*4) < 0) {
perror("ERROR: reading message len: ");
return 1;
}
/* converte int in char */
M->msglen=0;
M->msglen=num[0]&0xFF;
M->msglen=M->msglen<<8;
M->msglen= M->msglen | (num[1] & 0xFF);
M->msglen=M->msglen<<8;
M->msglen= M->msglen | (num[2] & 0xFF);
M->msglen=M->msglen<<8;
M->msglen= M->msglen | (num[3] & 0xFF);
/*read message*/
if(read( csd, M->msg , sizeof(char) * M->msglen) < 0) {
perror("ERROR: reading msg message: ");
return 1;
}
return 0;
}
int write_msg(msg_t *M, int sk){
/* invia un messaggio attraverso la socket,
ogni campo memorizzato in M viene inviato separatamente tramite le funzioni write */
char num[4];
/*write type of message*/
if(write( sk, &(M->type), sizeof(char)) < 0){
perror("ERROR: writing message: ");
return 1;
}
/*write sender*/
if(write( sk, M->sender, sizeof(char)*256) < 0){
perror("ERROR: writing message: ");
return 1;
}
/*write receiver */
if(write( sk, M->receiver, sizeof(char)*256) < 0){
perror("ERROR: writing message: ");
return 1;
}
/*write msglen*/
num[0]=(M->msglen>>24)&0xFF;
num[1]=(M->msglen>>16)&0xFF;
num[2]=(M->msglen>>8)&0xFF;
num[3]=M->msglen & 0xFF;
if(write( sk, num, sizeof(char)*4) < 0){
perror("ERROR: writing message: ");
return 1;
}
/*write message*/
if(write( sk , M->msg , sizeof(char)*M->msglen) < 0){
perror("ERROR: writing message: ");
return 1;
}
return 0;
}
#endif
Non capisco se il messaggio che legge o riceve lo vuole in char quindi va bene la String che sto cercando di realizzare, oppure trasforma tutto in un integer.
Riuscite ad aiutarmi? grazie