Oppure

Loading
13/04/09 22:07
Thejuster
Allora

dopo aver aggiustato un paio di cose

l'errore adesso appare al momento che il server và ad aggiornare la lista degli indirizzi ip

Dim ret_str As String()
  'per tutti i client presenti
  If(socket_list.Count()<>0)
   For i=0 to socket_list.Count()-1
    'aggiunto l'indirizzo nella lista
    ReDim ret_str(i)'(ridimensiono il vettore)
    ret_str(i)=socket_list(i).get_address
   Next i    
  Else
   ReDim ret_str(1)
   ret_str(0)=""
  End If
  'ritorno la lista
  Return ret_str


questo accade secondo me quando non ci sono ip da rilevare
e crasha il server.


Private Sub update_serv()
  Dim list As String()
  Dim str, msg As String
  Dim cl_nmb As Integer=0
  Do
   'aggiorno lista client connessi
   If(service.get_address_num()<>0)
    If(cl_nmb<>service.get_address_num())
      list=service.get_addr_list() 
     lstClA.Items.Clear()
     For Each str in list
      lstClA.Items.Add(str)
     Next    
     cl_nmb=service.get_address_num()
    End If  
    'aggiorno log dei messaggi
    list=service.get_addr_list() 
    For Each str in list
     If(service.get_msg_num(str)<>0)
                        tx.Text += str + vbCrLf


                        '' da Qui ricevo l'ip del cliente
                        
                        ultimomessaggio = str



                        For Each msg In service.get_messages(str)



                            
                            tx.Text += msg

                            comandi(msg, str)

                        Next
     End If
    Next    
   End If   
  Loop
 End Sub


loop principale
Ultima modifica effettuata da Thejuster 13/04/09 23:49
mire.forumfree.it/ - Mire Engine
C# UI Designer
14/04/09 10:07
punkettone90
allora un'attimo, prima dici che secondo te il programma va in crash dopo che un utente si disconnette, adesso dici che dopo aver sistemato alcune cose il problema sta nell'aggiornamento della lista; non ho capito se il programma va in crash o se entra in un loop infinito, se va in crash scrivi l'errore che ti dice l'IDE e anche la riga in cui il programma è andato in crash
aaa
14/04/09 14:05
Thejuster

Private Sub update_serv()
  Dim list As String()
  Dim str, msg As String
  Dim cl_nmb As Integer=0
  Do
   'aggiorno lista client connessi
   If(service.get_address_num()<>0)
    If(cl_nmb<>service.get_address_num())
      list=service.get_addr_list()
     lstClA.Items.Clear()
     For Each str In list
      lstClA.Items.Add(str)
     Next    
     cl_nmb=service.get_address_num()
    End If  
    'aggiorno log dei messaggi
    list=service.get_addr_list()
    For Each str In list
     If(service.get_msg_num(str)<>0)
                        tx.Text += str + vbCrLf


                        '' da Qui ricevo l'ip del cliente
                        
                        ultimomessaggio = str



                        For Each msg In service.get_messages(str)



                            
                            tx.Text += msg

                            comandi(msg, str)

                        Next
     End If
    Next    
   End If  
  Loop


l'ide segna l'errore al next sotto a comandi(msg,str)
crasha e basta non da altre spiegazioni.

mire.forumfree.it/ - Mire Engine
C# UI Designer
15/04/09 8:22
Il Totem
Se segna solo la parte di codice in giallo, forse hai disattivato le eccezioni. Vai su Debug > Gestione eccezioni (Exceptions): nella voce Common Language Runtime Exceptions spunta Thrown.
aaa
15/04/09 19:10
Thejuster
adesso dà un errore qui

Public Function get_addr_list()as String()
  Dim ret_str As String()
  'per tutti i client presenti
  If(socket_list.Count()<>0)
   For i=0 to socket_list.Count()-1
    'aggiunto l'indirizzo nella lista
    ReDim ret_str(i)'(ridimensiono il vettore)
    

 --->    ret_str(i)=socket_list(i).get_address
  giallo


   Next i    
  Else
   ReDim ret_str(1)
   ret_str(0)=""
  End If
  'ritorno la lista
  Return ret_str
 End Function


{"Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme. Nome parametro: index"}
mire.forumfree.it/ - Mire Engine
C# UI Designer
16/04/09 17:13
Il Totem
Sorvolando sulla pulizia del codice, che lascia a desiderare :D non dovrebbe dare errore di indice quando hai espressamente scritto che l'indice massimo deve essere i. Magari, riscrivendo meglio il codice puoi individuare l'errore, infatti: ReDim cancella tutta la collezione; per non cancellarla devi usare ReDim Preserve, che comunque è inutile dato che la dimensione la conosci; tra parentesi della collezione argomento di ReDim va l'indice massimo e non il numero di elementi come hai fatto - penso - dopo l'else. Riprova così:
Public Function GetAddressList() As String()
  Dim Result() As String
  If socket_list.Count() > 0 Then
    ReDim Result(socket_list.Count() - 1)
    For I As Int16 = 0 To socket_list.Count() - 1
      Result(I) = socket_list(I).get_address()
    Next
  End If
  Return Result
End Function
aaa