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
C# / VB.NET - creazione chat in vb express edition 2008! aiuto!
Forum - C# / VB.NET - creazione chat in vb express edition 2008! aiuto!

Avatar
nala84 (Normal User)
Newbie


Messaggi: 13
Iscritto: 18/03/2008

Segnala al moderatore
Postato alle 17:37
Martedì, 18/03/2008
ciao a tutti!
sto provando a creare una chat utilizzando visual basic express edition 2008... ho provato ad eseguire le istruzioni site in tale sito:
http://www.vbasic.it/articoli/ldlChat.htm


quindi ho inserito nel mio progetto Client tale codice:

Public Class Form1

Private Sub cmdConnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnetti.Click
Static Stat As Boolean ' Variabile statica che contiene True se si è connessi e False se non
If Stat = False Then
If Len(txtIP.Text) > 0 And Len(txtPorta.Text) > 0 Then ' Se c'è sia l'IP sia la porta
TCP.Connect(txtIP, Val(txtPorta)) ' Si connette
cmdConnetti.Text = "Disconnetti"
Stat = True
lblStato.Text = "Connettendo"
Else
MsgBox("Dati mancanti!", vbExclamation)
End If
Else
TCP.Close() ' Chiude La connessione
Stat = False
lblStato.Text = "Chiudendo"
cmdConnetti.Text = "Connetti"
End If

End Sub



Private Sub TCP_ConnectEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TCP.ConnectEvent
lblStato.Text = "Connesso"
End Sub
Private Sub TCP_CloseEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles TCP.CloseEvent
TCP.Close() ' Per chiudere definitivamente la socket senno rimane .State = sckClosing
lblStato.Text = "Disconnesso"
End Sub



Private Sub cmdInvia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInvia.Click
If Len(txtInvia) > 0 Then ' Se c'è qualcosa da spedire la spedisci
TCP.SendData(txtInvia.Text) ' Invia i dati
txtChat.Text = txtChat.Text & "locale> " & txtInvia.Text & vbCrLf
txtChat.SelectionStart= Len(txtChat.Text)
txtInvia.Text = vbNullString
lblStato.Text = "Inviando " & Len(txtInvia.Text) & "Bytes"
End If

End Sub

Private Sub TCP_SendComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles TCP.SendComplete
lblStato.Text = "Dati inviati con successo"

End Sub
Dim Description As String
Dim Scode As Long
Dim Source As String
Dim HelpFile As String
Dim HelpContext As Long
Dim CancelDisplay As Boolean

Private Sub TCP_Error(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent) Handles TCP.Error
Dim Number As Integer

TCP.Close() ' Chiude la socket MsgBox "Errore TCP " & Number & vbCrLf & Description
lblStato.Text = "Errore TCP " & Number
End Sub

Private Sub TCP_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles TCP.DataArrival
Dim Data As String
Dim bytesTotal As Long
TCP.GetData(Data) ' Copia i dati del Buffer in entrata nella variabile Data e svuota il Buffer
lblStato.Text = "In arrivo " & bytesTotal & " bytes"
txtChat.Text = txtChat.Text & "remoto> " & Data & vbCrLf ' Aggiunge il Testo
' Imposta come inizio della selezione la fine, per lo scrolling automatico
txtChat.SelectionStart = Len(txtChat.Text)
End Sub
End Class

ma mi restituisce un avviso:
Variabile 'Data' passata per riferimento prima dell'assegnazione di un valore. È possibile che venga restituita un'eccezione dovuta a un riferimento con valore null in fase di esecuzione.

e mandandolo in esecuzione, infatti, mi genera 2 eccezioni:
- la prima cliccando sul bottone "invia"
- la seconda cliccando sul bottone "Connetti"

Qlc sa come aiutarmi??  

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 14:00
Venerdì, 21/03/2008
Il warning che ti viene segnalato non c'entra con gli errori che si presentano a runtime. In pratica, il compilatore ti sta comunicando che la variabile Data non contiene niente (è Nothing) e che passandola ad un metodo potrebbero insorgere eccezioni. In questo caso, però, va bene che sia vuota, perchè verrà inizializzata all'interno del metodo GetData, quindi non ci devi badare.
Codice sorgente - presumibilmente VB.NET

  1. 'Qui Data = Nothing
  2. Dim Data As String
  3. Dim bytesTotal As Long
  4. 'Passando Nothing a un metodo si genera un warning
  5. TCP.GetData(Data)



Il primo errore è dato dal fatto che invece di passare stringhe come parametri, passi degli oggetti TextBox. Quindi devi sostituire:
Codice sorgente - presumibilmente Plain Text

  1. TCP.Connect(txtIP, Val(txtPorta))


con:
Codice sorgente - presumibilmente Plain Text

  1. TCP.Connect(txtIP.Text, Val(txtPorta.Text))



Il secondo errore è dello stesso tipo:
Codice sorgente - presumibilmente C# / VB.NET

  1. If Len(txtInvia) > 0 Then


al posto di:
Codice sorgente - presumibilmente C# / VB.NET

  1. If Len(txtInvia.Text) > 0 Then



Ad ogni modo ti suggerisco di modificare quel codice, che è stato scritto in origine per VB6. Quindi dovresti sostituire cose di questo tipo:
Codice sorgente - presumibilmente VB.NET

  1. Len(txtIP.Text) -> txtIp.Text.Length
  2. Val(txtPorta.Text) -> CInt(txtPorta.Text)
  3. vbNullString -> Nothing
  4. Long -> Integer
  5. Integer -> Short
  6. MsgBox("Dati Mancanti!") -> MessageBox.Show("Dati Mancanti!")


PM Quote
Avatar
pinguino (Ex-Member)
Pro


Messaggi: 172
Iscritto: 26/12/2007

Segnala al moderatore
Postato alle 21:50
Venerdì, 21/03/2008
ho letto l' articolo segnalato da te...
poi ho scaricato il sorgente completo, i file sorgente sn per vb6 -.-
me ne sn accorto dal fatto ke i sorgenti vb.net hanno l' estensione .vbproj mentre vb6 ha .vbp
ed inoltre ci sn files .frm, file ke in vb.net sono con estensione .vb.
+ il codice ke è vb6...

Ultima modifica effettuata da pinguino il 21/03/2008 alle 21:51
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:23
Sabato, 22/03/2008
Non è esatto: il codice è vb.net poichè comprende classi e handler d'evento ed è compatibile con qualsiasi compilatore. Tuttavia si nota facilmente che la maggioranza delle funzioni usate derivano da VB6, il che fa pensare che sia stato scritto per VB6 e incollato modificando le parti sostanziali in un compilatore vb.net. Quindi basta modificare alcune cosette come riportato sopra per portarlo ad uno stato "normale".

PM Quote
Avatar
nala84 (Normal User)
Newbie


Messaggi: 13
Iscritto: 18/03/2008

Segnala al moderatore
Postato alle 11:28
Sabato, 22/03/2008
Grazie per avermi risposto!

ho provato a modificare il codice in questo modo:

Option Strict Off
Option Explicit On
Friend Class frmClient
    Inherits System.Windows.Forms.Form
    ' Progetto di esempio Chat VB col WinSock by HeDo 2003

    Private Sub cmdConnetti_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdConnetti.Click
        Static Stat As Boolean ' Variabile statica che contiene True se si è connessi e False se non
        If Stat = False Then
            If txtIP.Text.Length > 0 And txtPorta.Text.Length > 0 Then ' Se c'è sia l'IP sia la porta
                TCP.Connect(txtIP, CInt(txtPorta.Text))  ' Si connette
                cmdConnetti.Text = "Disconnetti"
                Stat = True
                lblStato.Text = "Connettendo"
            Else
                MsgBox("Dati mancanti!", MsgBoxStyle.Exclamation)
            End If
        Else
            TCP.Close() ' Chiude La connessione
            Stat = False
            lblStato.Text = "Chiudendo"
            cmdConnetti.Text = "Connetti"
        End If
    End Sub

    Private Sub TCP_ConnectEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TCP.ConnectEvent
        lblStato.Text = "Connesso"
    End Sub

    Private Sub TCP_CloseEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TCP.CloseEvent
        TCP.Close() ' Per chiudere definitivamente la socket senno rimane .State = sckClosing
        lblStato.Text = "Disconnesso"
    End Sub

    Private Sub cmdInvia_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdInvia.Click
        If Len(txtInvia) > 0 Then ' Se c'è qualcosa da spedire la spedisci
            TCP.SendData(txtInvia) ' Invia i dati
            txtChat.Text = txtChat.Text & "locale> " & txtInvia.Text & vbCrLf
            txtChat.SelectionStart = txtChat.Text.Length
            txtInvia.Text = Nothing
            ' Elimina il testo inviato da txtInvia
            'UPGRADE_ISSUE: La funzione LenB non è supportata. Fare clic per ulteriori informazioni: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword= ..."'
            lblStato.Text = "Inviando " & txtInvia.Text.Length & "Bytes"
        End If
    End Sub
    Dim Data As String
    Dim bytesTotal As Long
    'Passando Nothing a un metodo si genera un warning

    Private Sub TCP_DataArrival(ByVal eventSender As System.Object, ByVal eventArgs As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles TCP.DataArrival

        TCP.GetData(Data) ' Copia i dati del Buffer in entrata nella variabile Data e svuota il Buffer
        lblStato.Text = "In arrivo " & eventArgs.bytesTotal & " bytes"
        txtChat.Text = txtChat.Text & "remoto> " & Data & vbCrLf ' Aggiunge il Testo
        txtChat.SelectionStart = txtChat.Text.Length
        ' Imposta come inizio della selezione la fine, x lo scrolling automatico
    End Sub

    Private Sub TCP_Error(ByVal eventSender As System.Object, ByVal eventArgs As AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent) Handles TCP.Error
        TCP.Close() ' Chiude la socket
        MsgBox("Errore TCP " & eventArgs.number & vbCrLf & eventArgs.description)
        lblStato.Text = "Errore TCP " & eventArgs.number
    End Sub

    Private Sub TCP_SendComplete(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TCP.SendComplete
        lblStato.Text = "Dati inviati con successo"
    End Sub
End Class

Ma cliccando sul pulsante "invia" si blocca alla linea di codice:

If Len(txtInvia) > 0 Then

Invalid CastException non è stata gestita
Tipo non corrispondente

ho sbagliato qlc nel modificare il codice?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:38
Domenica, 23/03/2008
Scusa ma non vedi che errore c'è? E' notevole:
Codice sorgente - presumibilmente C# / VB.NET

  1. If Len(txtInvia) > 0 Then


Tu stai chiedendo la lunghezza in caratteri di una casella di testo, di un oggetto TextBox, quando la funzione richiede espressamente una stringa, ossia il testo contenuto nella textbox.

PM Quote