Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Dime. massima di un pacchetto.

    Ciao a tutti.
    Ho la necessità di sapere quale è la dim. in byte, massima di un pacchetto e come posso sapere se il pacchetto sarà spezzato o lasciato intero.

    Io ho la necessità che arrivi tutti di un pezzo, se mi si divide diventa un pacchetto nulla.

    Mi serve integro perchè ho un server che gestisce centinaia di connessioni e la richiesta deve avvenire tutta assieme ma devo anche essere sicuro che mentre la spedisco mi si spezzi e quando la vado a leggere a destinazioni risulti frammentata ed invalida.

    Io comprimo i pacchetti con zlib e questo è uno dei motivi per il quale non posso dividerli. O almeno, potriei dividerli ma ci metto il doppio a programmare.
    Grazie in anticipo, ciao.

  2. #2
    Utente di HTML.it L'avatar di seclimar
    Registrato dal
    Sep 2002
    Messaggi
    21,042
    pacchetto di cosa??

    ma stavi continuando una discussione gia' iniziata?

  3. #3
    ops, scusa.
    Mi riferivo ad un pacchetto TCP/IP.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di seclimar
    Registrato dal
    Sep 2002
    Messaggi
    21,042
    il pacchetto TCP/IP deve essere spezzabile

    tutto e' gia' gestito dal TCP/IP ...
    quindi se invii un pacchetto ..anche se viene spezzato... non ci sono problemi poiche' l'applicativo che riceve i dati ...gia' li prende ricostruiti!

    (al contrario del UDP)


    per la dimensione massima...di sicuro c'e' qualcosa sul sito microsoft cercando MAXMTU o MTU


    ma ..a meno che devi fare tu un socket TCP/IP....
    il tcp/ip esistente...gia' provvedere a impacchettare e restituire i pacchetti corretti

  5. #5
    Ciao, allora, è un paio di ore che ho programmato per permettere al client di inviare pacchetti massimi di 10KB.

    Anche se arrivano spezzati il server li ricostruisce....
    In più ho implementato la funzione per decidere se usare o meno la compressione zlib...

    CMQ sia, gestire un server è più complicato di quanto immaginassi:
    codice:
    	sub buffering {
    		my $utente=shift;
    		my $buf=shift;
    		my $temp;
    		if($utente->{dim}>0) {
    			$utente->{buf}.=$buf;
    			if (length $buf == $utente->{dim}) {
    				$temp=$utente->{buf};
    				$utente->{buf}="";
    				$utente->{dim}=-1;
    				return uncompress($utente->{buf}) if ($utente->{compresso});
    				return $utente->{buf};
    			}
    			if (length $utente->{buf} > 10240 || length $utente->{buf} > $utente->{dim}) {
    				$utente->{dim}=-1;
    				$utente->{buf}="";
    			}
    			return undef;
    		}
    		return undef if (substr($buf,0,2) ne "\x87\x89");
    		unpack("C",substr($buf,2,1))>1 ? return undef : ($utente->{compresso}=unpack("C",substr $buf,2,1 ));
    		unpack("S",substr($buf,3,2))>10240 ? return undef : ($utente->{dim}=unpack("S",substr $buf,3,2));
    		if ($utente->{dim}==length($buf)-5) {
    			$utente->{dim}=-1;
    			print "l'ho inviato subito senza comprimerlo? ".$utente->{compresso}."\n";
    			return uncompress(substr($buf,5,length($buf)-5)) if $utente->{compresso};
    			return substr($buf,5,length($buf)-5);
    		}
    		$utente->{buf}=substr($buf,5,length($buf)-5);
    		print "Pacchetto suddiviso in più parti\n";
    		return undef;
    	}
    Grazie

  6. #6
    Utente di HTML.it L'avatar di seclimar
    Registrato dal
    Sep 2002
    Messaggi
    21,042
    ma cosa devi fare ??
    dovresti dirci qualcosa in piu'...

    mettiti nei nostri panni...
    non sappiamo nulla di cosa stai facendo!

  7. #7
    uhm...nulla.
    Un server per un p2p.
    Ormai il server l'ho finito...il bello inizia ora con il client.
    Ma ormai l'ho tutto progettato e se la voglia per portarlo a termine rimane, secondo me viene una cosa carina di tutto rispetto.
    Basta solo avere pazienzza che nel programmare è tutto.
    :bubu:
    ciauz

  8. #8
    Utente di HTML.it L'avatar di seclimar
    Registrato dal
    Sep 2002
    Messaggi
    21,042
    beh...a parere mio ...
    non ti devi preoccupare di come il TCP/IP ti spezzetta i pacchetti che mandi!

    anche perche' ti garantisce che al destinatario arriveranno ricostruiti...

  9. #9
    bhè si, avevo letto qualcosa del genere sulla cisco.
    Il fatto è che se prendo una variabile e la riempio con 10MB di roba e faccio poi:
    print $socket $variabile_da_10_MB;
    Lui non invia un pacchetto da 10MB ma lo divide, ed è questo il mio problema principale.
    Così io ho risolto semplicemente mettendo la dimenzione del pacchetto nei secondi due byte. Così io memorizzo tutto in un buffer fino a quando non ho la dimenzione indicatami dal client.
    Metodo semplice ma efficace.
    ciao ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.