Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - datagramma corto
Forum - Visual Basic 6 - datagramma corto

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
ho un problema un po' difficile da risolvere,..... sto' realizzando una applicazione p2p....quando eseguo una ricerca se i risultati sono troppi mi da' questo errore ....
il datagramma e' troppo grande per essere inserito nel buffer e verra' abbreviato.....

la ricerca io la eseguo cosi', carico i risultati su una variabile e poi li invio.....suppongo che questo errore sia ci sia perche' ho superato il limite di capienza delle variabile.....
avete idea di come poter sistemare?.......mi dispiacerebbe limitare il numero di risultati.....


  

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 15:20
Venerdì, 10/04/2009
Se non mostri il codice che usi e non descrivi un po' l'architettura e il protocollo usati .... oltre ad indicare la linea in cui si verifica ...

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:48
Venerdì, 10/04/2009
Testo quotato

Postato originariamente da theprogrammer:

Se non mostri il codice che usi e non descrivi un po' l'architettura e il protocollo usati  



come no volentieri

quando ad un client viene chiesto di fare una ricerca dei file il client esegue questo codice....

Codice sorgente - presumibilmente VB.NET

  1. risultatiricerca = ""
  2.     If Combo1.text = "qualsiasi" Then
  3.     ElseIf Combo1.text = "video" Then
  4.        file(0) = ".3gp,.asf,.animgif,.avi,.divx,.swf,.mpeg,.mpg,.mp4v,.wmv,.qicktime,.mkv,.rm,.vob,.svi"
  5.     ElseIf Combo1.text = "immagini" Then
  6.        file(0) = ".bmp,.gif,.jpeg,.jpg,.pict,.png,.tga,.tiff,.djvu,.pcx"
  7.     ElseIf Combo1.text = "archivi" Then
  8.        file(0) = ".bz2,.gz,.tar,.zip,.jar,.rar,.7z,.ace,.arj,.arc,.bic,.cab,.hqx,.iso,.lha,.mdf,.sit,.zoo,.toast,.sitx"
  9.     ElseIf Combo1.text = "audio" Then
  10.        file(0) = ".aac,.ac3,.aiff,.amr,.bwf,.cda,.iff,.mid,.mka,.mp3,.riff,.quick time,.pca,.ra,.rm,.ogg,.wav,.wma,.xm"
  11.     End If
  12.     If Combo1.text <> "qualsiasi" Then
  13.        ricerca = Split(file(0), ",")
  14.        For Each parola3 In filecondivisi
  15.            par(0) = parola3
  16.            par(1) = Split(par(0), "    ")(1 - 1) 'StripFileName(par(0))
  17.            nomefile = par(0)
  18.            fun "immagine in lista"
  19.            ricerca1 = Split(par(1), " ")
  20.            ricerca2 = Split(text(0).text, " ")
  21.            ricerca6() = Split(risricerca(tbs.Tabs.Count), "£££$$$@@@")
  22.            For a = LBound(ricerca) To UBound(ricerca)
  23.                For c = LBound(ricerca1) To UBound(ricerca1)
  24.                    For d = LBound(ricerca2) To UBound(ricerca2)
  25.                        'If LCase(ricerca1(c)) = ricerca2(d) Then '& ricerca(a) Then
  26.                         If InStr(1, LCase(ricerca1(c)), ricerca2(d)) Then
  27.                           If Right(par(1), Len(ricerca(a))) = ricerca(a) Then
  28.                              'List1.AddItem par(0)
  29.                              'risricerca(tbs.Tabs.Count) = risricerca(tbs.Tabs.Count) & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "£££$$$@@@"
  30.                              risultatiricerca = risultatiricerca & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "£££$$$@@@" '& virtualip
  31.                           End If
  32.                        End If
  33.                        Exit For
  34.                    Next d
  35.                Next c
  36.            Next a
  37.        Next parola3
  38.    Else
  39.        For Each parola3 In filecondivisi
  40.           par(0) = parola3
  41.           par(1) = Split(par(0), "    ")(1 - 1) 'StripFileName(par(0))
  42.           ricerca1 = Split(par(1), " ")
  43.           ricerca2 = Split(text(0).text, " ")
  44.            For c = LBound(ricerca1) To UBound(ricerca1)
  45.                For d = LBound(ricerca2) To UBound(ricerca2)
  46.                    'If LCase(ricerca1(c)) = ricerca2(d) Then
  47.                    If InStr(1, LCase(ricerca1(c)), ricerca2(d)) Then
  48.                       'List1.AddItem par(0)
  49.                       'risricerca(tbs.Tabs.Count) = risricerca(tbs.Tabs.Count) & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "£££$$$@@@"
  50.                       risultatiricerca = risultatiricerca & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "    " & virtualip & "£££$$$@@@" '& virtualip
  51.                    End If
  52.                    Exit For          
  53.                Next d
  54.            Next c
  55.        Next parola3
  56.     End If
  57.     Ws.SendData "risultato ricerca" & "£££$$$@@@;;;" & risultatiricerca '& "£££$$$@@@;;;" & virtualip



l'errore me lo da' alla fine quando faccio il senddata......
l'errore che mi da' e':

errore di run-time '10040'


PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 17:36
Venerdì, 10/04/2009
Quanto e' lunga la stringa

risultatoricerca

quando tenti di inviarla?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:39
Sabato, 11/04/2009
mi da errore quando mi restituisce 360 risultati, ogni risultato contiene il nome del file, il codice hash e l'ip virtuale......
quindi la variabile dovrebbe contenere parecchio.....credo che sia prorpio per questo che mi errore....

del resto come si puo' supereare i limiti di capienza di una variabile.....
o in alternativa si puo' fare piu' senddata ma non so se sia una cosa giusta da fare.....
  
avete qualche idea ?
    

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:42
Sabato, 11/04/2009
Il problema non e' nella variabile ma nel buffer di trasmissione TCP.

Spezza in due o piu' parti il risultato della query e usa piu' Send per trasmettere le varie parti.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:24
Martedì, 14/04/2009
dopo un po' di giorni di tentativi ho risolto in questo modo....
nella parte del send ho introdotto 4 nuove variabili

la prima ir  splitta i risultati della ricerca cosi' posso suddividerli per inviarli....
test1 = indica il limite minimo della variabile ir
test2 = al numero massimo di ricerche da inviare nello stesso momento
test = al posto di risultatoriceca , che si cancella ad ogni invio

attraverso un ciclo do while fino a quando la differenza tra UBound(ir) e test2
sara' superirore od uguale a 50 si procede con l'invio.....

cosa ne pensi?

  
Codice sorgente - presumibilmente VB.NET

  1. ir = Split(risultatiricerca, "£££$$$@@@")
  2.     If UBound(ir) > 50 Then
  3.        test1 = LBound(ir)
  4.        test2 = 50
  5.        Do While (UBound(ir) - test2) = 50 Or (UBound(ir) - test2) > 50
  6.           Pausa 0.001
  7.           For i = test1 To test2
  8.               test = test + ir(i) & "£££$$$@@@"
  9.           Next i
  10.           Ws.SendData "risultato ricerca" & "£££$$$@@@;;;" & test
  11.           test1 = test2
  12.           test2 = test2 + 50
  13.           test = ""
  14.        Loop
  15.        
  16.     Else
  17.        Ws.SendData "risultato ricerca" & "£££$$$@@@;;;" & risultatiricerca '& "£££$$$@@@;;;" & virtualip
  18.     End If


PM Quote