Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260

    [VB.NET] Inviare dati tra due pc tamite tcp

    Ciao raga

    Il codice che vi sto per postare serve per connettere due pc tramite tcp per lo scambio di dati:

    codice:
    Imports System.Runtime.Serialization
    Imports System.Runtime.Serialization.Formatters.Binary
    Imports System.Net.Sockets
    Imports System.Net.Sockets.TcpClient
    Imports System.Net
    Imports System
    
    Public Class Form1
        Private moTcpClient, moTcpRxClient As TcpClient
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim moTcpServer = New TcpListener(13000)
            moTcpServer.Start()
            lb1.Text = ("Listening...")
            Button3.Enabled = False
            Button2.Enabled = True
            Button1.Enabled = False
            Do While Not moTcpServer.Pending
                Application.DoEvents()
            Loop
            moTcpRxClient = moTcpServer.AcceptTcpClient
            lb1.Text = ("Connection received...")
            moTcpServer.Stop()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    
            Dim moLocalIP = Dns.GetHostByName(Dns.GetHostName)
            Dim ip = moLocalIP.AddressList(0).ToString
            '// Creates object
    
            Dim oPerson As New Person(TextBox1.Text, Int32.Parse(TextBox2.Text))
    
            '// Let's use dotNET TcpClient
            moTcpClient = New TcpClient()
            moTcpClient.Connect(ip, 13000)
            If moTcpClient.GetStream.CanWrite Then
    
                '// Serializes object in memory
                Dim bf As New BinaryFormatter()
                Dim oStream As New System.IO.MemoryStream()
                bf.Serialize(oStream, oPerson)
                '// Gets bytes...
                Dim buf(CInt(oStream.Length)) As Byte
                oStream.Position = 0
                Dim iRet As Int32 = oStream.Read(buf, 0, buf.Length)
                oStream.Close()
                '// Send object through TCP-IP...
                moTcpClient.GetStream.Write(buf, 0, buf.Length)
                Button3.Enabled = True
                Button2.Enabled = False
            End If
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            '// Deserializes object
            Dim oNs As NetworkStream = moTcpRxClient.GetStream
            If oNs.CanRead Then
                If oNs.DataAvailable Then
                    '// Deserializes object
                    Try
                        Dim bf As New BinaryFormatter()
                        Dim oRxPerson As Person = CType(bf.Deserialize(oNs), Person)
                        Risultato.Text = String.Format("Name:{0} Age:{1}", oRxPerson.Name, oRxPerson.Age)
                    Catch ex As Exception
                        '// Something wrong...
                        MessageBox.Show(ex.Message, "Deserialization error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Finally
                        '// Closes connection
                        moTcpRxClient.Close()
                        ' btnDeser.Enabled = False
                        Button3.Enabled = False
                        Button2.Enabled = False
                        Button1.Enabled = True
                    End Try
                End If
            End If
        End Sub
    End Class
    
    '// Just a simple person object...
    <Serializable()> Public Class Person
        Public Name As String
        Public Age As Int32
        Public Sub New(ByVal name As String, ByVal age As Int32)
            Me.Name = name
            Me.Age = age
        End Sub
    End Class

    Quest'esempio trovato in rete serve per mandare una stringa da un pc all'altro tramite tcp.

    io invece vorrei inviare un file fisico esempio un "file.pdf", e che l'utente di destinazione quando va a deserializzare il file lo salvi automaticamente nella sua cartella Condivisi...

    Come posso modificare il sopracitato codice per fare quanto detto?
    Ho provato in vari modi ma nn ci riesco
    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260
    nn si può fare nulla ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260
    conoscete qualche blog sito che ne parli?

  4. #4
    Dovresti creare un oggetto che contenga un array di bytes al cui interno inserire il contenuto del file da passare, quindi il resto del programma viene da sé...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260
    un piccolo esempio esemplificativo no?!?!?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    9

    RISP Trasferimento file tramite tcp

    Io non ho letto il codice che hai fornito quindi è possibile che quello che ho scritto in questa risp sia la stessa cosa che fa il tuo programma.

    Secondo me dovresti creare due applicazioni, una che riceve e una che invia.
    Quando vuoi inviare un file, lo apri in binario con l'appliccazione che invia e mandi una quantità fissa di dati gestendola con una variabile integer (valore consigliato 8191). Tu mandi i dati col winsock e dall'altra parte il ricevente li infila in un nuovo file (aperto in binario). Per controllare che i dati arrivino correttamente, fai in maniera che il ricevente, quando gli arriva il quanto di dati, invii un messaggio di conferma. Dovrebbe funzionare.....

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260
    Ciao

    Si, ma un piccolo esempio nn si può fare?

    Almeno posso sapere come faccio a indicare al "client d'invio" dove si trova il file sul mio hd, in pratica come faccio a caricare il file sul client??

    Grazie mille

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260
    In c basta fare:

    codice:
    FileStream fout = new FileStream(local_shared_dir + "\\" + shared_file_name  , FileMode.Create, FileAccess.Write) ;

    In vb.net come faccio?

  9. #9
    Ma questo non è un trasferimento TCP/IP :rollo:, è il salvataggio di un file su una share di rete! Be', allora basta usare i normali metodi per lavorare sui files di VB.NET o, se vuoi solo copiare i files, basta il metodo System.IO.File.Copy...
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    260
    ho fatto così
    codice:
     '// Serializzo in memoria
                Dim bf As New BinaryFormatter()
                Dim oStream As New System.IO.MemoryStream()
    
              
      Dim FileCaricato As New System.IO.FileStream("C:\testo.txt", IO.FileMode.Create, IO.FileAccess.Write)
    
               
    
     bf.Serialize(oStream, FileCaricato)
                '// recupero byte
                Dim buf(CInt(oStream.Length)) As Byte
                oStream.Position = 0
                Dim iRet As Int32 = oStream.Read(buf, 0, buf.Length)
                oStream.Close()
                '// invio...
                moTcpClient.GetStream.Write(buf, 0, buf.Length)
    Adesso da l'altro lato cosa devo utilizzare affinchè lo legga e scarichi nella sua cartella "condivisi"?

    MItaly ma:

    codice:
              
    
     System.IO.File.Copy("c:\\text.txt", "c:\\condivisi\\text.back", True)
    non serve a copiare un file da una directory all'altra del "proprio pc"?
    Come faccio a mandarlo nella directory del pc del server che ascolta?

    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.