vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Datei über TCP senden 
Autor: ModeratorDaveS (Moderator)
Datum: 12.11.05 20:22

Nun gut wenn du meinst, aber hier ist einfacher C/S Code, der ein Chat ermöglicht und auch eine Datei schickt mit nur einer Verbindung, wie meistens der Fall ist bei solchen Übertragungen (basiert auf Beispielcode von ReinhardH)

Client

    '##########################################################################
    ' #######################
    '                                          client code
    '##########################################################################
    ' #######################
 
 
    ' sender stream
    Private output As NetworkStream
 
    ' schreiben und lesen des stream
    Private writer As BinaryWriter
    Private reader As BinaryReader
 
    ' message
    Private message As String = ""
 
    ' thread um ein blockieren der anwednung zu verhindern
    Private readThread As Thread
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        'neuer client thread kreieren
        readThread = New Thread(AddressOf RunClient)
        'thread starten
        readThread.Start()
    End Sub
 
    Private Sub txtInput_KeyDown(ByVal sender As System.Object, ByVal e As _
      System.Windows.Forms.KeyEventArgs) Handles txtClientInput.KeyDown
 
        ' keydown event (abfrage nach enter) wird benützt um zu senden
        Try
 
            'wurde enter gedrückt?
            If e.KeyCode = Keys.Enter Then
 
                ' ja, sende textboxinhalt
                writer.Write("CLIENT>>> " & txtClientInput.Text)
 
                txtClientOutput.Text &= vbCrLf & "CLIENT>>> " & _
                   txtClientInput.Text
 
                txtClientInput.Clear()
            End If
 
            ' ausnahme behandeln
        Catch exception As SocketException
            txtClientOutput.Text &= vbCrLf & "fehler beim schreiben"
        End Try
 
    End Sub
 
    Public Sub RunClient()
        Dim client As TcpClient
 
        'instanziere client
        Try
            txtClientOutput.Text &= "verbindungsaufbau" & vbCrLf
            'kreiere neuen client
            client = New TcpClient()
            'verbinden mit server (localhost kann mit einer gültigen ip ersetzt 
            ' werden
            client.Connect("localhost", 3456)
 
            'networkstream binden
            output = client.GetStream()
 
            ' kreiere neuen streamschreiber und streamleser
            writer = New BinaryWriter(output)
            reader = New BinaryReader(output)
 
            txtClientOutput.Text &= vbCrLf & "stream erhalten" & vbCrLf
            txtClientInput.ReadOnly = False
 
            Try
                Do
                    'nachricht des servers lesen
                    message = reader.ReadString
                    txtClientOutput.Text &= vbCrLf & message
                Loop
 
                ' ausnahme behandeln
            Catch inputOutputException As IOException
                MessageBox.Show("client application beenden")
 
            Finally
 
                txtClientOutput.Text &= vbCrLf & "verbindung schliessen." & _
                  vbCrLf
 
                'stream schreiber schliessen
                writer.Close()
                'stream leser schliessen
                reader.Close()
                'stream schliessen
                output.Close()
                'tcpclient schliessen
                client.Close()
 
            End Try
 
            Application.Exit()
 
            ' ausnahme behandeln
        Catch inputOutputException As Exception
            MessageBox.Show("client applikation beenden")
        End Try
 
    End Sub
 
    ' Datei schicken
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button2.Click
        Dim fn As String = "temp.bmp"
        Dim fs As New FileStream("F:\Work Dev\VSNet Dev\Test\" & fn, _
          FileMode.Open)
        Dim b(fs.Length - 1) As Byte
        fs.Read(b, 0, b.Length)
        fs.Close()
        writer.Write("SendFile")
        writer.Write(fn)
        writer.Write(CInt(b.Length))
        writer.Write(b)
    End Sub
Server

    '##########################################################################
    ' #######################
    '                                          server code
    '##########################################################################
    ' #######################
 
 
    ' socket für verbindung
    Private connection As Socket
    ' sender stream des servers
    Private socketStream As NetworkStream
 
    ' schreiben und lesen des stream
    Private writer As BinaryWriter
    Private reader As BinaryReader
 
    ' thread um ein blockieren der anwednung zu verhindern
    Private readThread As Thread
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        readThread = New Thread(AddressOf RunServer)
        readThread.Start()
    End Sub
 
    Private Sub txtInput_KeyDown(ByVal sender As System.Object, ByVal e As _
      System.Windows.Forms.KeyEventArgs) Handles txtServerInput.KeyDown
 
        Try
            If e.KeyCode = Keys.Enter Then
                writer.Write("Server>>> " & txtServerInput.Text)
                txtServerOutput.Text &= vbCrLf & "Server>>> " & txtServerInput.Text
                txtServerInput.Clear()
            End If
 
        Catch exception As SocketException
            txtServerOutput.Text &= vbCrLf & "fehler beim schreiben"
        End Try
 
    End Sub
 
    Public Sub RunServer()
        Dim listener As TcpListener
        Dim counter As Integer = 1
 
        Try
            listener = New TcpListener(3456)
            listener.Start()
            While True
                txtServerOutput.Text = "auf verbindung warten" & vbCrLf
 
                'hier wird das listen des servers gesetzt
                connection = listener.AcceptSocket()
 
                'ipa = CType(connection.RemoteEndPoint, IPEndPoint).Address
 
                'Dim ipab() As Byte = ipa.GetAddressBytes()
 
                'Debug.WriteLine(connection.LocalEndPoint.ToString())
 
 
                'netwrokstream binden
                socketStream = New NetworkStream(connection)
 
                ' kreiere neuen streamschreiber und streamleser
                writer = New BinaryWriter(socketStream)
                reader = New BinaryReader(socketStream)
 
                txtServerOutput.Text &= "verbindung " & counter & "." & vbCrLf
 
                'bestätige client erfolgreiche konnektierung
                writer.Write("SERVER>>> verbindung erfolgreich")
 
                txtServerInput.ReadOnly = False
                Dim theRequest As String = ""
 
                Try
                    Do
                        'des clients nachrichten lesen und nach TRENNEN meldung 
                        ' auswerten
                        theRequest = reader.ReadString()
 
                        txtServerOutput.Text &= vbCrLf & theRequest
 
                        ' Wenn Datei, dann Datei empfangen und abspeichern
                        If theRequest = "SendFile" Then
                            Dim fn As String = reader.ReadString()
                            Dim l As Integer = reader.ReadInt32()
                            Dim b() As Byte = reader.ReadBytes(l)
                            Dim fs As New FileStream(fn, FileMode.Create, _
                              FileAccess.Write, FileShare.None)
                            fs.Write(b, 0, l)
                            fs.Close()
                        End If
 
                    Loop While (theRequest <> "CLIENT>>> TRENNEN" _
                      AndAlso connection.Connected)
 
                Catch inputOutputException As IOException
                    MessageBox.Show("Client application closing")
 
                Finally
 
                    txtServerOutput.Text &= vbCrLf & "verbindung geschlossen"
 
                    txtServerInput.ReadOnly = True
 
                    writer.Close()
                    reader.Close()
                    socketStream.Close()
                    'nach msdn erst shutdown und dann close
                    'connection.Shutdown(SocketShutdown.Both)
                    connection.Close()
 
                    counter += 1
                End Try
 
            End While
 
        Catch inputOutputException As IOException
            MessageBox.Show("Server application closing")
 
        End Try
 
    End Sub

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Datei über TCP senden6.970MeisterEngel12.11.05 14:31
Re: Datei über TCP senden3.906ModeratorDaveS12.11.05 14:46
Re: Datei über TCP senden4.252MeisterEngel12.11.05 15:33
Re: Datei über TCP senden3.832ModeratorDaveS12.11.05 17:37
Re: Datei über TCP senden3.913MeisterEngel12.11.05 18:41
Re: Datei über TCP senden5.572ModeratorDaveS12.11.05 20:22
Re: Datei über TCP senden3.795MeisterEngel12.11.05 23:32
Re: Datei über TCP senden3.813ModeratorDaveS13.11.05 10:00
Re: Datei über TCP senden3.748MeisterEngel13.11.05 10:10
Re: Datei über TCP senden3.633MeisterEngel14.11.05 16:11
Re: Datei über TCP senden3.577ModeratorDaveS14.11.05 17:16
Re: Datei über TCP senden3.580MeisterEngel14.11.05 18:21
Re: Datei über TCP senden3.638ModeratorDaveS14.11.05 18:26
Re: Datei über TCP senden3.687Fabian Stern15.11.05 14:47
Re: Datei über TCP senden3.708ModeratorDaveS15.11.05 15:11
Re: Datei über TCP senden3.600MeisterEngel15.11.05 17:35

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel