|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 845
|
Socket TCP Trasferire GROSSI DATI - problema Buffer?
Salve
devo trasferire, delle mega strutture da 22kb ciascuna. Se attraverso la send inserisco tutta la struttura, dall'altro lato (lato ricevente) vengono ricevuti circa 15 pacchetti da 1,5Kb (sto lavorando in wireless). La mia domanda è ? c'e' un metodo migliore? mi convine frammetare da me i dati o lo faccio fare tranquillamente a lui? seconda cosa...man mano che mi arrivano i dati sul buffer, come li accodo per ottenere un unico buffer? a) funzione per concatenare stream di bytes ? b) funzione per copiare da uno stream di bytes tot dati con un ben preciso shift di n byte (tipo bcopy ma con lo shift di n byte) ? Grazie Salvo |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
I sistemi posix definiscono il flag MSG_WAITALL per la recv che potrebbe esserti di aiuto se usi simili sistemi (unix & co). Personalmente preferisco delle letture multiple (con una poll con timeout se vuoi fare le cose per bene).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 845
|
Salve, anke io ho optato per delle letture multiple...alla fine i dati sono eterogenei, quindi nn ho problemi a sbatterli tutti dentro un mega buffer...MA HO UN PROBLEMA, in codice...quel che faccio è :
int n; char *buffer; char *b; char *megabuffer; char *p; // il puntatore che puntera' alla prima posizione libera del megabuffer... buffer=malloc(2000); b=malloc(2000); megabuffer=malloc(20000); p=megabuffer; while(1) { n=recv(s, buffer,2000,0); bcopy(buffer,b,n); ... ... bcopy(b,p,n); // copio da b a p(che punta sul megabuffer) nbyte (appena arrivati che risiedono su b) p=p+n; //sposto il puntatore in avanti di n bytes x nuovi dati... } ovviamente eseguo altri controlli vari...questo è un riassunto del codice... il problema è che : in un thread il puntatore a carattere p NON viene modificato...ossia l'incremento e l'assegnazione non vengono considerati...(cosi' come SONO COSTRETTO a fare dei malloc, altrimenti la recv o send vanno in errore se eseguite in un thread) cosa posso fare??? se li faccio girare come processo normale tutto liscio...ma coi thread? cosa è che NON SO ? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:36.