[GUIDA][VB.NET]Come sviluppare una connessione via Socket

Guida completamente scritta da me su come sviluppare una connessione con i Socket in VB.NET

« Older   Newer »
 
  Share  
.
  1. >>TheHackerX<<
     
    .

    User deleted


    Indice
    1- Visual Studio (Download)
    2- Creazione del Client
    3- Spiegazione del codice del Client
    4- Spiegazione del Server
    5- Spiegazione del codice del Server
    6- Saluti


    1 - Visual Studio (Download)
    Iniziamo col dire che ci sono diverse versioni di Visual Studio...
    Dalla versione Express, alla Ultimate... La versione Express, quella con meno funzioni, è quella Gratis, mentre quella Ultimate è a pagamento...
    Per chi non sapesse bene cos'è Visual Studio, consiglio di leggersi questo: Wikipedia Microsoft Visual Studio
    Concludo dicendo anche che questo codice è testato sulla versione Visual Studio 2010 Ultimate, ma funziona anche con le versioni 2008 e 2012 di Visual Studio... Visto che il codice è testato, e risulta funzionante su Visual Studio 2010, vi riporto ai download delle versioni Express ed Ultimate.
    Download Microsoft Visual Studio Express: Visual Studio 2010 Express
    Download Microsoft Visual Studio Ultimate: Visual Studio 2010 Ultimate


    2 - Creazione del Client
    Dopo aver scaricato ed installato Visual Studio 2010, apriamolo.
    Clicchiamo su Nuovo Progetto, e selezioniamo Windows Form... Diamo un nome alla nostra applicazione, e clicchiamo su Ok.
    Ora andremo a creare una semplice "Chat" ossia un semplice scambio di Messaggi.
    Nel Form inseriamo:
    Una TextBox-> Nome: txtIP-> Text: 127.0.0.1
    Un Button-> Nome: btnConnetti->Text: Connetti
    Un' altra TextBox con la proprietà MultiLine attiva-> Nome: OutPut
    Un' altra TextBox-> Nome: InputBox
    Un Button-> Nome: btnSend->Text: Invia


    Eccovi uno screen su come dovrebbe venire....


    Infine inseriamo un Timer->Nome:tmrDati

    Bene... Ora passiamo ai codici.... Ricordo che in questa parte metto il codice da copiare, e nell' altra parte della guida spiego il codice.
    --------------------------------------------------
    Doppio click su una parte del Form, accederemo così all' evento Load del Form1
    Importiamo le librerie necessarie...
    Questo codice va sopra a: Public Class Form1

    CODICE
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text.UTF7Encoding


    Subito dopo Public Class Form1 inseriamo questo.
    CODICE
    Dim server As TcpListener
       Dim client As TcpClient
       Dim NetStream As NetworkStream


    Facciamo doppio click sul btnConnetti, ossia il tasto per connettersi...
    CODICE
    client = New TcpClient
           Try
               Application.DoEvents()
               client.Connect(txtIP.Text, 2000)
           Catch ex As Exception
               MsgBox("Connessione fallita!", MsgBoxStyle.Critical, "Errore")
           End Try
           If client.Connected Then
               MsgBox("Sei connesso!", MsgBoxStyle.Information, "Info")
               NetStream = client.GetStream
               btnConnetti.Enabled = False
           End If


    Ora facciamo doppio click su btnSend, il tasto per inviare i messaggi...
    CODICE
    Dim t() As Byte = UTF7.GetBytes(InputBox.Text)
           NetStream.Write(t, 0, t.Length)


    Infine dobbiamo gestire i dati che arrivano... Quindi doppio click sul Timer...
    CODICE
    If client.Available > 0 Then
               Dim d(client.Available - 1) As Byte
               NetStream.Read(d, 0, d.Length)
               Dim stringa As String = UTF7.GetString(d)
               OutPut.Text += vbCrLf & stringa
           End If


    BENE! Ecco come, più o meno, dovrebbe essere il vostro codice....


    3 - Spiegazione del codice del Client

    Nel primo codice non c' è molto da dire.... Serve solamente ad importare le librerie necessarie....
    Nel secondo, dichiariamo 3 variabili....

    CODICE
    Dim server As TcpListener è inutilizzata...
    Dim client As TcpClient è la variabile che servirà a noi per connetterci
    Dim NetStream As NetworkStream sarebbe il flusso (un "tubo") do viaggiano i dati....


    Poi....
    CODICE
    Client = New TcpClient -> Inizializza il client
    Try -> prova a_
    Client.Connect(txtIP.Text, 2000) -> Connettiti all' IP specificato nella textbox dell'IP sulla porta 2000
    Catch ex As Exception -> In caso di errore
    MsgBox("Connessione fallita!", MsgBoxStyle.Critical, "Errore") -> Mostra un messaggio di errore
    If client.Connected Then -> Se la connessione è andata a buon fine
              MsgBox("Sei connesso!", MsgBoxStyle.Information, "Info") -> Mostra un messaggio
              NetStream = client.GetStream -> Metti in comunicazione il Client con il Server
              btnConnetti.Enabled = False -> e disattiva il tasto per connetterti...
          End If


    Per inviare i messaggi....
    CODICE
    Dim t() As Byte = UTF7.GetBytes(InputBox.Text) -> Crea un' Array di Byte che contenga il testo della inputbox
          NetStream.Write(t, 0, t.Length) -> e scrivi questi dati nel flusso....


    Infine per ricevere si esegue questo...
    CODICE
    If client.Available > 0 Then -> Se il Server sta mandando dei dati
              Dim d(client.Available - 1) As Byte -> Crea un' Array che li possa contenere
              NetStream.Read(d, 0, d.Length) -> e falli leggere dal flusso... Ma siccome i dati letti sono in Byte
              Dim stringa As String = UTF7.GetString(d) -> crea una variabile stringa che converta i byte in stringa normale
              OutPut.Text += vbCrLf & stringa -> e insrisci quella stringa nella OutPut
          End If


    4 - Spiegazione del Server
    Creiamo un nuovo progetto, ora nel Form andremo ad inserire:
    1 TextBox -> Nome: OutPut Proprietà MultiLine attiva
    1 TextBox -> Nome: InputBox
    1 Button -> Nome: btnSend
    1 Timer -> Nome: tmrConnessioni
    1 Timer -> Nome: tmrDati

    Eccovi uno screen di come dovrebbe venire...



    Ottimo! Ora passiamo ai codici...
    -------------------------------------------
    Doppio click sul From, per accedere all' evento Load del Form1...
    Ora dobbiamo inserire questo codice sopra Public Class Form1..

    CODICE
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text.UTF7Encoding


    E poi, subito sotto andiamo ad inserire questo...
    CODICE
    Dim server As TcpListener
       Dim client As TcpClient
       Dim NetStream As NetworkStream


    Nel Form1.Load invece....
    CODICE
    server = New TcpListener(2000)
           server.Start()
           OutPut.Text = "Server avviato... In attesa che quelcuno si connetta!"
           tmrConnessioni.Start()


    Doppio click sul Timer delle connessioni (tmrConnessioni) ed inseriamo questo
    CODICE
    If server.Pending Then
               client = server.AcceptTcpClient
               NetStream = client.GetStream
               OutPut.Text = "Si è connesso un utente!"
               tmrConnessioni.Stop()
               tmrDati.Start()
           End If


    Ora andiamo nel Timer che gestisce i dati in entrata (tmrDati) e inseriamo questo...
    CODICE
    If client.Available > 0 Then
               Dim b(client.Available - 1) As Byte
               NetStream.Read(b, 0, b.Length)
               Dim stringa As String = UTF7.GetString(b)
               OutPut.Text += vbCrLf & stringa
           End If


    E per finire il codice del tasto che invia.... (btnSend)
    CODICE
    Dim t() As Byte = UTF7.GetBytes(InputBox.Text)
           NetStream.Write(t, 0, t.Length)


    5 - Spiegazione del codice del Server
    Eccoci giunti alla spiegazione del codice...
    INIZIAMO!

    ---------------------------------------------
    1° Codice
    CODICE
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text.UTF7Encoding

    Come ne client questo codice importa solamente le librerie necessarie allo sviluppo del server...

    2° Codice
    CODICE
    Dim server As TcpListener
      Dim client As TcpClient
      Dim NetStream As NetworkStream

    Con questo codice si dichiarano le variabili che verranno utilizzate dal Server..

    3° Codice
    CODICE
    server = New TcpListener(2000) -> Inizializza il Server sulla porta 200
          server.Start() -> Avvia il Server
          OutPut.Text = "Server avviato... In attesa che quelcuno si connetta!" -> Scrive nella OutPut (<b>TextBox</b>)
          tmrConnessioni.Start() -> Avvia il Timer che gestirà le connessioni


    4° Codice
    CODICE
    If server.Pending Then -> Se qualche client stà cercando di connettersi
              client = server.AcceptTcpClient -> Accettalo
              NetStream = client.GetStream -> E mettiti in comunicazione con lui...
              OutPut.Text = "Si è connesso un utente!" -> Scrivi sulla OutPut (<b>TextBox</b>)
              tmrConnessioni.Stop() -> Fermati
              tmrDati.Start() -> e avvia il timer che gestisce i dati in entrata...
          End If


    5° Codice
    CODICE
    If client.Available > 0 Then -> Se il Client stà mandando dei dati
              Dim b(client.Available - 1) As Byte -> Crea un'Array di Byte che li possa contenere
              NetStream.Read(b, 0, b.Length) -> Leggi i dati dall' Array <b>b</b>
              Dim stringa As String = UTF7.GetString(b) -> Trasforma quei Byte in Stringa
              OutPut.Text += vbCrLf & stringa -> E mettili nella OutPut...
          End If


    6° Codice
    CODICE
    Dim t() As Byte = UTF7.GetBytes(InputBox.Text) -> Crea un'Array di Byte che contenga il testo della InputBox
          NetStream.Write(t, 0, t.Length) -> E scrivilo sul flusso di dati....


    FINITO!

    6 - Saluti

    Balla ragazzi... La guida finisce quì... Spero vi sia stata utile e vi sia piaciuta.... Mi raccomando, iscrivetevi al Forum!!!!

    Edited by >>TheHackerX<< - 17/2/2013, 12:43
     
    Top
    .
  2. Daniele Trabucco
     
    .

    User deleted


    Ciao!
    ottimo spunto ma sto cercando di aggiungere a questo un altro flusso dati... ossia vorrei aggiungere lo streaming della cam come faccio ad etichiettare i diversi flussi?
     
    Top
    .
  3. SVPippone
     
    .

    User deleted


    Salve a tutti, vorrei capire se questa soluzione è corretta anche per pc non della stessa rete, in quest'ultimo caso dovrei specificare un IP pubblico?

    Grazie mille
     
    Top
    .
  4. MarcoCad
     
    .

    User deleted


    Non funziona!

    Sto usando vb2019
     
    Top
    .
  5. Marco Cadore
     
    .

    User deleted


    Non funziona lato server
    New TcpListener

    Edited by Marco Cadore - 21/8/2020, 19:32
     
    Top
    .
4 replies since 16/2/2013, 22:18   7081 views
  Share  
.
Top