Oppure

Loading
10/04/09 11:38
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.....


10/04/09 13:20
theprogrammer
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 ...
aaa
10/04/09 13:48
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....

 risultatiricerca = ""
    If Combo1.text = "qualsiasi" Then
    ElseIf Combo1.text = "video" Then
       file(0) = ".3gp,.asf,.animgif,.avi,.divx,.swf,.mpeg,.mpg,.mp4v,.wmv,.qicktime,.mkv,.rm,.vob,.svi"
    ElseIf Combo1.text = "immagini" Then
       file(0) = ".bmp,.gif,.jpeg,.jpg,.pict,.png,.tga,.tiff,.djvu,.pcx"
    ElseIf Combo1.text = "archivi" Then
       file(0) = ".bz2,.gz,.tar,.zip,.jar,.rar,.7z,.ace,.arj,.arc,.bic,.cab,.hqx,.iso,.lha,.mdf,.sit,.zoo,.toast,.sitx"
    ElseIf Combo1.text = "audio" Then
       file(0) = ".aac,.ac3,.aiff,.amr,.bwf,.cda,.iff,.mid,.mka,.mp3,.riff,.quick time,.pca,.ra,.rm,.ogg,.wav,.wma,.xm"
    End If
    If Combo1.text <> "qualsiasi" Then
       ricerca = Split(file(0), ",")
       For Each parola3 In filecondivisi
           par(0) = parola3
           par(1) = Split(par(0), "    ")(1 - 1) 'StripFileName(par(0))
           nomefile = par(0)
           fun "immagine in lista"
           ricerca1 = Split(par(1), " ")
           ricerca2 = Split(text(0).text, " ")
           ricerca6() = Split(risricerca(tbs.Tabs.Count), "£££$$$@@@")
           For a = LBound(ricerca) To UBound(ricerca)
               For c = LBound(ricerca1) To UBound(ricerca1)
                   For d = LBound(ricerca2) To UBound(ricerca2)
                       'If LCase(ricerca1(c)) = ricerca2(d) Then '& ricerca(a) Then
                        If InStr(1, LCase(ricerca1(c)), ricerca2(d)) Then
                          If Right(par(1), Len(ricerca(a))) = ricerca(a) Then
                             'List1.AddItem par(0)
                             'risricerca(tbs.Tabs.Count) = risricerca(tbs.Tabs.Count) & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "£££$$$@@@"
                             risultatiricerca = risultatiricerca & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "£££$$$@@@" '& virtualip
                          End If
                       End If
                       Exit For
                   Next d
               Next c
           Next a
       Next parola3
   Else
       For Each parola3 In filecondivisi
          par(0) = parola3
          par(1) = Split(par(0), "    ")(1 - 1) 'StripFileName(par(0))
          ricerca1 = Split(par(1), " ")
          ricerca2 = Split(text(0).text, " ")
           For c = LBound(ricerca1) To UBound(ricerca1)
               For d = LBound(ricerca2) To UBound(ricerca2)
                   'If LCase(ricerca1(c)) = ricerca2(d) Then
                   If InStr(1, LCase(ricerca1(c)), ricerca2(d)) Then
                      'List1.AddItem par(0)
                      'risricerca(tbs.Tabs.Count) = risricerca(tbs.Tabs.Count) & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "£££$$$@@@"
                      risultatiricerca = risultatiricerca & Left(par(0), Len(par(0)) - Len(Split(par(0), "    ")(4 - 1)) - 4) & "    " & virtualip & "£££$$$@@@" '& virtualip
                   End If
                   Exit For           
               Next d
           Next c
       Next parola3
    End If
    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'

10/04/09 15:36
theprogrammer
Quanto e' lunga la stringa

risultatoricerca

quando tenti di inviarla?
aaa
11/04/09 9:39
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 ?
11/04/09 9:42
theprogrammer
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.
aaa
14/04/09 16:24
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?

 ir = Split(risultatiricerca, "£££$$$@@@")
    If UBound(ir) > 50 Then
       test1 = LBound(ir)
       test2 = 50
       Do While (UBound(ir) - test2) = 50 Or (UBound(ir) - test2) > 50
          Pausa 0.001
          For i = test1 To test2
              test = test + ir(i) & "£££$$$@@@"
          Next i
          Ws.SendData "risultato ricerca" & "£££$$$@@@;;;" & test
          test1 = test2
          test2 = test2 + 50
          test = ""
       Loop
       
    Else
       Ws.SendData "risultato ricerca" & "£££$$$@@@;;;" & risultatiricerca '& "£££$$$@@@;;;" & virtualip
    End If