Zanima me da li je netko rješavao i da li je ovo uopće dobar način slanja strukture preko socketa? Da li postoji neki efikasniji?
[code:1]
struct student{
char* ime;
int broj_kolegija; // predstavlja duljinu nizova nazivi_kolegija i ocjene
char** nazivi_kolegija;
int* ocjene;
};
void raspakiraj(void *student1)
{
student *student1=(student *) student1;
char* ime1 = student1->ime;
int broj_kolegija1 = student1->broj_kolegija;
char** nazivi_kolegija1 = student1->nazivi_kolegija;
int* ocjene1 = student1->ocjene;
int len_naziva_kolegija=broj_kolegija1 - strlen(ocjene1);
}
int posaljiString( int sock, char *ime )
{
int duljinaImena = strlen( ime );
int poslano, poslanoZadnje;
int duljinaImena_n = htonl( duljinaImena );
poslanoZadnje = send( sock, &duljinaImena_n, sizeof( duljinaImena_n ), 0 );
if( poslanoZadnje != sizeof( duljinaImena_n ) ) return NIJEOK;
poslano = 0;
while( poslano != duljinaImena )
{
poslanoZadnje = send( sock, ime + poslano, duljinaImena - poslano, 0 );
if( poslanoZadnje == -1 || poslanoZadnje == 0 ) return NIJEOK;
poslano += poslanoZadnje;
}
return OK;
}
int posaljiOcjene( int sock, int *ocjene )
{
int duljinaOcjene = strlen( ocjene );
int poslano, poslanoZadnje;
int duljinaOcjene_n = htonl( duljinaOcjene );
poslanoZadnje = send( sock, &duljinaOcjene_n, sizeof( duljinaOcjene_n ), 0 );
if( poslanoZadnje != sizeof( duljinaOcjene_n ) ) return NIJEOK;
poslano = 0;
while( poslano != duljinaOcjene )
{
poslanoZadnje = send( sock, ocjene + poslano, duljinaOcjene - poslano, 0 );
if( poslanoZadnje == -1 || poslanoZadnje == 0 ) return NIJEOK;
poslano += poslanoZadnje;
}
return OK;
}
int posaljiBroj( int sock, int broj )
{
int poslanoZadnje;
int broj_n = htonl( broj );
poslanoZadnje = send( sock, &broj_n, sizeof( broj_n ), 0 );
if( poslanoZadnje != sizeof( broj_n ) ) return NIJEOK;
return OK;
}
int posalji_nazive_kolegija(int sock, const char** str, int length){
if( posaljiBroj(sock, length) == OK ){
for(int i = 0; i < length && posalji_string(sock, str[i]); ++i);
}
RETURN NIJEOK;
}
int posalji (int sock, struct student S)
{
raspakiraj(S);
while(OK)
{
posalji_string(sock, ime1);
posaljiBroj(sock, broj_kolegija1);
posalji_nazive_kolegija(sock, nazivi_kolegija1, len_naziva_kolegija);
posaljiOcjene(sock, ocjene1);
return OK;
}
return NIJEOK;
}
[/code:1]
Zanima me da li je netko rješavao i da li je ovo uopće dobar način slanja strukture preko socketa? Da li postoji neki efikasniji?
Kod: |
struct student{
char* ime;
int broj_kolegija; // predstavlja duljinu nizova nazivi_kolegija i ocjene
char** nazivi_kolegija;
int* ocjene;
};
void raspakiraj(void *student1)
{
student *student1=(student *) student1;
char* ime1 = student1->ime;
int broj_kolegija1 = student1->broj_kolegija;
char** nazivi_kolegija1 = student1->nazivi_kolegija;
int* ocjene1 = student1->ocjene;
int len_naziva_kolegija=broj_kolegija1 - strlen(ocjene1);
}
int posaljiString( int sock, char *ime )
{
int duljinaImena = strlen( ime );
int poslano, poslanoZadnje;
int duljinaImena_n = htonl( duljinaImena );
poslanoZadnje = send( sock, &duljinaImena_n, sizeof( duljinaImena_n ), 0 );
if( poslanoZadnje != sizeof( duljinaImena_n ) ) return NIJEOK;
poslano = 0;
while( poslano != duljinaImena )
{
poslanoZadnje = send( sock, ime + poslano, duljinaImena - poslano, 0 );
if( poslanoZadnje == -1 || poslanoZadnje == 0 ) return NIJEOK;
poslano += poslanoZadnje;
}
return OK;
}
int posaljiOcjene( int sock, int *ocjene )
{
int duljinaOcjene = strlen( ocjene );
int poslano, poslanoZadnje;
int duljinaOcjene_n = htonl( duljinaOcjene );
poslanoZadnje = send( sock, &duljinaOcjene_n, sizeof( duljinaOcjene_n ), 0 );
if( poslanoZadnje != sizeof( duljinaOcjene_n ) ) return NIJEOK;
poslano = 0;
while( poslano != duljinaOcjene )
{
poslanoZadnje = send( sock, ocjene + poslano, duljinaOcjene - poslano, 0 );
if( poslanoZadnje == -1 || poslanoZadnje == 0 ) return NIJEOK;
poslano += poslanoZadnje;
}
return OK;
}
int posaljiBroj( int sock, int broj )
{
int poslanoZadnje;
int broj_n = htonl( broj );
poslanoZadnje = send( sock, &broj_n, sizeof( broj_n ), 0 );
if( poslanoZadnje != sizeof( broj_n ) ) return NIJEOK;
return OK;
}
int posalji_nazive_kolegija(int sock, const char** str, int length){
if( posaljiBroj(sock, length) == OK ){
for(int i = 0; i < length && posalji_string(sock, str[i]); ++i);
}
RETURN NIJEOK;
}
int posalji (int sock, struct student S)
{
raspakiraj(S);
while(OK)
{
posalji_string(sock, ime1);
posaljiBroj(sock, broj_kolegija1);
posalji_nazive_kolegija(sock, nazivi_kolegija1, len_naziva_kolegija);
posaljiOcjene(sock, ocjene1);
return OK;
}
return NIJEOK;
}
|
|