Posto il codice che utilizzo per connettere due computer con TCPListner e TCPClient, cercando di rendere questo thread più utile per tutti
Lato Server:
1.Genera un form
2.Inserisci un Button (.Text=Ascolta)
3.Inserisci una Textbox
codice:
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports Microsoft.VisualBasic
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Control.CheckForIllegalCrossThreadCalls = False
Dim Th As New Threading.Thread(AddressOf Ascolta)
Th.SetApartmentState(Threading.ApartmentState.STA)
Th.Start()
End Sub
Sub Ascolta()
Dim server As TcpListener
server = Nothing
Try
'Imposta la porta
Dim port As Int32 = 2000
Dim localAddr As IPAddress = IPAddress.Parse("000.000.00.0")
server = New TcpListener(localAddr, port)
''Avvia l'apertura della porta "2000"
server.Start()
' Buffer per la lettura dei dati
Dim bytes(1024) As Byte
Dim data As String = Nothing
' Avvio il ciclo per la connessione
While True
TextBox1.Text += "Attendo la connessione..." & vbCrLf
'Accetto la connessione
Dim client As TcpClient = server.AcceptTcpClient()
TextBox1.Text += "Connesso!" & vbCrLf
data = Nothing
'Oggetto canale per la ricezione e l'invio
Dim stream As NetworkStream = client.GetStream()
Dim i As Int32
'Ricevo i dati inviati dal client
i = stream.Read(bytes, 0, bytes.Length)
While (i <> 0)
'Converto i dati da bytes a ASCII.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
TextBox1.Text += "Ricevuti: " & data & vbCrLf
'Analisi dei dati inviati dal client
data = data.ToUpper()
Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)
'Invio la risposta al client
stream.Write(msg, 0, msg.Length)
TextBox1.Text += "Inviato: " & data & vbCrLf
i = stream.Read(bytes, 0, bytes.Length)
End While
'Chiudo la connessione
client.Close()
End While
Catch ex As SocketException
TextBox1.Text += "SocketException: " & vbCrLf
Finally
server.Stop()
End Try
End Sub
End Class
Lato Client:
1.Genera un form
2.Inserisci un Button (.Text=Connetti)
3.Inserisci una Textbox
codice:
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports Microsoft.VisualBasic
Public Class Form1
Sub Connect(ByVal server As [String], ByVal message As [String])
Try
'Creazione dell'oggetto client
Dim port As Int32 = 2000
Dim client As New Sockets.TcpClient(server, port)
'Converto il messaggio passato come ASCII e lo memorizzo in un array
Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
'Avvio un canale per inviare e ricevere
Dim stream As NetworkStream = client.GetStream()
'Invio un messaggio al server connesso
stream.Write(data, 0, data.Length)
TextBox1.Text += "Inviato: " & message & vbCrLf
'ricevo la risposta del server e la memorizzo nel buffer
data = New [Byte](256) {}
Dim responseData As [String] = [String].Empty
'Leggo la risposta del server tcp
Dim bytes As Int32 = stream.Read(data, 0, data.Length)
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
TextBox1.Text += "Ricevuto: " & responseData & vbCrLf
'Chiudo il canale e la connessione tcp
stream.Close()
client.Close()
Catch ex As ArgumentNullException
TextBox1.Text += "ArgumentNullException: " & ex.Message & vbCrLf
Catch ex As Net.Sockets.SocketException
TextBox1.Text += "SocketException: " & ex.Message & vbCrLf
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Connect("000.000.00.0", "Ciao")
End Sub
In Internet si trova una marea di materiale circa l'utilizzo di questi oggetti, se avete consigli sul codice scritto (ovviamente le funzionalità così sono molto ridotte, infatti non è possibile nemmeno scegliere l'Ip del server o la porta ma è molto semplice modificare questo codice per implementarlo) dite pure.
Per quanto riguarda la connessione FTP, ho scritto che non è molto performante
Citazione:
Per quanto riguarda il trasferimento di file FTP non è poi così performante
Insomma ... veramente, per i file, e' uno dei protocolli che rendono di piu' ...
perchè evidentemente sbaglio qualcosa.
Ma per fare l'upload di un file mdb di modeste dimensioni (Basti pensare ad una sola tabella con 10 colonne (contatore, numeric e string) e solo qualche riga scritta potrebbe passare anche qualche minuto.
Stasera penso di essere alla frutta, domani vi posto il codice.