Bildübertragung

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Bildübertragung

    Hallo Zusammen,

    Ich habe einen Desktop-Viewer über TCP gebastelt:
    Spoiler anzeigen
    server/anzeige:

    VB.NET-Quellcode

    1. Private Sub receiveImage()
    2. Dim bf As New BinaryFormatter
    3. While client.Connected = True
    4. nstream = client.GetStream
    5. PictureBox1.Image = bf.Deserialize(nstream)
    6. MsgBox(nstream)
    7. End While
    8. End Sub
    9. Private Sub Listen()
    10. While client.Connected = False
    11. server.Start()
    12. client = server.AcceptTcpClient
    13. End While
    14. getImage.Start()
    15. End Sub
    16. Dim client As New TcpClient
    17. Dim server As New TcpListener(8085)
    18. Dim nstream As NetworkStream
    19. Dim listening As New Thread(AddressOf Listen)
    20. Dim getImage As New Thread(AddressOf receiveImage)
    21. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    22. listening.Start()
    23. Timer1.Stop()
    24. End Sub
    25. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    26. If _bS.Position + 1 > _bS.Count - 1 Then
    27. Timer1.Enabled = False
    28. Call start()
    29. _bS.Position = 0
    30. Else
    31. Me.Text = _bS.Position & "/" & _bS.Count - 1
    32. _bS.MoveNext()
    33. End If
    34. End Sub


    client/anzusehender Bildschirm

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Imports System.Net.Sockets
    4. Imports System.Threading
    5. Imports System.Drawing
    6. Imports System.Runtime.Serialization.Formatters.Binary
    7. Public Class Form1
    8. Dim client As New TcpClient
    9. Dim nstream As NetworkStream
    10. Public Function Desktop() As Image
    11. Dim bounds As Rectangle = Nothing
    12. Dim screenshot As System.Drawing.Bitmap = Nothing
    13. Dim graph As Graphics = Nothing
    14. bounds = Screen.PrimaryScreen.Bounds
    15. screenshot = New Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    16. graph = Graphics.FromImage(screenshot)
    17. graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
    18. Return screenshot
    19. End Function
    20. Private Sub SendImage()
    21. Dim bf As New BinaryFormatter
    22. nstream = client.GetStream
    23. bf.Serialize(nstream, Desktop())
    24. End Sub
    25. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    26. SendImage()
    27. End Sub
    28. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    29. Try
    30. client.Connect("192.168.61.52", 8085)
    31. Catch ex As Exception
    32. MsgBox("Failed to connect...")
    33. End Try
    34. End Sub
    35. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    36. 'nstream = ("hallo")
    37. Timer1.Start()
    38. End Sub
    39. End Class


    Wie kann ich hier am schnellsten implementieren das der client automatisch startet und ich nicht auf den listen button klicken muss :s
    Der Threadtitel ging völlig an der Anfrage vorbei... Egal. Wenn der Nutzer es im Autostart haben möchte kann er es selbst dorthin verschieben. Hier im Forum wird dir normalerweise keiner beim Basteln von "Viren" helfen.

    8-) faxe1008 8-)
    Abgesehen davon, dass uns Andy schon wieder sein Halbwissen presentieren möchte,
    war es nicht mal annäherd die Frage des Autors.

    Diese wurde nämlich mit:

    NGE'o schrieb:

    Nein, es werden hier keine Hilfen über Trojaner geben.

    beantwortet.
    Das ist nicht das komplette programm...
    Ich verwende das programm um bilder von einem ordner auf nem präsentationsscreen zu zeigen. Und auf button klick soll auch ein pc eingeblendet werden können.

    Ich möchte nicht das program fernstarten sondern nur den server für die bildübertragung.

    Gruss

    Mein code für den Monitor pc:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Imports System.Net.Sockets
    4. Imports System.Threading
    5. Imports System.Drawing
    6. Imports System.Runtime.Serialization.Formatters.Binary
    7. Public Class Form1
    8. Private _bS As New BindingSource()
    9. Private _sourcePath As New DirectoryInfo("\\192.168.1.5\Bilder")
    10. ' Private WithEvents _t As New Timer() With {.Interval = 1000}
    11. Public Sub New()
    12. Call start()
    13. End Sub
    14. Private Sub Button1_Click(sender As Object, e As EventArgs)
    15. Timer1.Enabled = Not Timer1.Enabled
    16. End Sub
    17. Sub start()
    18. InitializeComponent()
    19. _bS.DataSource = _sourcePath.GetFiles("*.jpg*")
    20. PictureBox1.DataBindings.Add(New Binding("ImageLocation", _bS, "FullName"))
    21. Timer1.Start()
    22. End Sub
    23. Private Sub receiveImage()
    24. Dim bf As New BinaryFormatter
    25. While client.Connected = True
    26. nstream = client.GetStream
    27. PictureBox1.Image = bf.Deserialize(nstream)
    28. End While
    29. End Sub
    30. Private Sub Listen()
    31. While client.Connected = False
    32. server.Start()
    33. client = server.AcceptTcpClient
    34. End While
    35. getImage.Start()
    36. End Sub
    37. Dim client As New TcpClient
    38. Dim server As New TcpListener(8085)
    39. Dim nstream As NetworkStream
    40. Dim listening As New Thread(AddressOf Listen)
    41. Dim getImage As New Thread(AddressOf receiveImage)
    42. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    43. listening.Start()
    44. Timer1.Stop()
    45. End Sub
    46. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    47. If _bS.Position + 1 > _bS.Count - 1 Then
    48. Timer1.Enabled = False
    49. Call start()
    50. _bS.Position = 0
    51. Else
    52. Me.Text = _bS.Position & "/" & _bS.Count - 1
    53. _bS.MoveNext()
    54. End If
    55. End Sub
    56. End Class


    zurzeit muss ich noch Button1 anklicken damit die Bildübertragung startet...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „schnibli“ ()

    Das Komunizieren der Programme habe ich nun geschaft, die frage ist nur:

    Wenn ich mit dem Client Disconnecte, erscheint einen Fehler auf dem Server und das Programm Stürtzt ab.

    Meine Frage:

    Wie kann ich diese Verbindung Sauber trennen?

    VB.NET-Quellcode

    1. Private Sub receiveImage()
    2. Dim bf As New BinaryFormatter
    3. While client.Connected = True
    4. nstream = client.GetStream
    5. PictureBox1.Image = bf.Deserialize(nstream)
    6. End While
    7. End Sub
    8. Private Sub Listen()
    9. While client.Connected = False
    10. server.Start()
    11. client = server.AcceptTcpClient
    12. End While
    13. getImage.Start()
    14. End Sub
    15. Dim client As New TcpClient
    16. Dim server As New TcpListener(8085)
    17. Dim nstream As NetworkStream
    18. Dim listening As New Thread(AddressOf Listen)
    19. Dim getImage As New Thread(AddressOf receiveImage)


    Neu:


    Hat sich erledigt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „schnibli“ ()

    Ich benutze jetzt für den Remote folgenden Code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function ImageToBytes(ByVal Image As Image) As Byte()
    2. Dim memImage As New System.IO.MemoryStream
    3. Dim bytImage() As Byte
    4. Image.Save(memImage, Image.RawFormat)
    5. bytImage = memImage.GetBuffer()
    6. Return bytImage
    7. End Function
    8. Sub SendDesktop()
    9. Try
    10. Client = New TcpClient("127.0.0.1", 8000)
    11. Dim Writer As New StreamWriter(Client.GetStream())
    12. Writer.Write(ImageToBytes(Desktop))
    13. Writer.Flush()
    14. Catch ex As Exception
    15. MsgBox(ex.Message)
    16. End Try
    17. End Sub
    18. Function Desktop() As Image
    19. Dim bounds As Rectangle
    20. Dim screenshot As System.Drawing.Bitmap
    21. Dim graph As Graphics
    22. bounds = Screen.PrimaryScreen.Bounds
    23. screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    24. graph = Graphics.FromImage(screenshot)
    25. graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
    26. Return screenshot
    27. End Function


    Jeoch ergibt dies eine schlechte Qualität, wie kann ich eine Bessere Qualität erreichen?

    Ich habe schon

    VB.NET-Quellcode

    1. screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format64bppArgb)


    Ausprobiert jedoch entschlüsselt mir dies der Andere Computer nicht richtig und das bild ist nicht erkennbar

    Problem behoben, falsche Einstellungen an der Picturebox

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „schnibli“ ()