Hallo,
als allererstes: Ich bin neu im Forum und wünsche allen erstmal einen schönen guten Tag.
Ich schreibe gerade eine (eig. zwei) Anwendungen für eine Remote Desktop Übertragung.
Der Code, den ich verwende, sieht bisher so aus:
Client:
Server:
Ist mehr oder weniger provisorisch. Funktioniert aber schon einwandfrei.
Jetzt, möchte ich die Serverfunktion in eine Extra Class auslagern und das Bild dann in die PictureBox1 laden.
Und genau da liegt das Problem...
Lagere ich die Annahme des Arrays (breader.Read) + die Umwandlung des Arrays ins Image (ByteArray2Image) in eine andere Klasse aus
und übergebe dann die Variable Image (also das umgewandelte Bild) der Form, bekomme ich kein Bild.
Hab's mehrmals überprüft: sowohl die Länge des Arrays (l) als auch die Bytes (b) kommen an, das Array wird in ein Image umgewandelt, aber nach wie vor
bekomme ich kein Bild zu sehen. Wie gesagt, wenn ich es so mache wie oben beschrieben, funktioniert es einwandfrei. Beim Auslagern in eine Class nicht.
Hoffe, dass mir hier vielleicht jemand helfen kann.
LG
als allererstes: Ich bin neu im Forum und wünsche allen erstmal einen schönen guten Tag.
Ich schreibe gerade eine (eig. zwei) Anwendungen für eine Remote Desktop Übertragung.
Der Code, den ich verwende, sieht bisher so aus:
Client:
Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Threading
- Public Class Form1
- Dim client As TcpClient
- Dim bwriter As BinaryWriter
- Dim breader As BinaryReader
- Dim IPAddress As String = "127.0.0.1"
- Dim Port As Integer = 1338
- Dim Frage As String
- Dim Antwort As String
- Sub Start()
- Dim t As New Thread(AddressOf Verbinden)
- t.IsBackground = True
- t.Start()
- End Sub
- Sub Verbinden()
- Try
- client = New TcpClient
- client.Connect(IPAddress, Port)
- If client.Connected = True Then
- bwriter = New BinaryWriter(client.GetStream)
- breader = New BinaryReader(client.GetStream)
- Dim t As New Thread(AddressOf Screen)
- t.IsBackground = True
- t.Start()
- End If
- Catch ex As Exception
- End Try
- End Sub
- Sub Screen()
- Try
- While client.Connected = True
- Dim b() As Byte = Image2ByteArray(Screenshot, Imaging.ImageFormat.Jpeg)
- bwriter.Write(CInt(b.Length))
- bwriter.Write(b)
- Thread.Sleep(100)
- End While
- Catch ex As Exception
- End Try
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Start()
- End Sub
- Public Function Screenshot()
- Dim Pic As New Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height)
- Dim graphic As Graphics = Graphics.FromImage(Pic)
- graphic.CopyFromScreen(0, 0, 0, 0, Pic.Size)
- graphic.Dispose()
- Return Pic
- End Function
- Public Function Image2ByteArray(ByVal Bild As Image, ByVal Bildformat As System.Drawing.Imaging.ImageFormat) As Byte()
- Dim MS As New IO.MemoryStream
- Bild.Save(MS, Bildformat)
- MS.Flush()
- Return MS.ToArray
- End Function
Server:
Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Threading
- Public Class Form1
- Dim server As TcpListener
- Dim client As TcpClient
- Dim bwriter As BinaryWriter
- Dim breader As BinaryReader
- Dim Port As Integer = 1338
- Sub Start()
- Try
- server = New TcpListener(New System.Net.IPAddress(0), Port)
- server.Start()
- client = server.AcceptTcpClient
- bwriter = New BinaryWriter(client.GetStream)
- breader = New BinaryReader(client.GetStream)
- Dim t As New Thread(AddressOf ÜbertrageScreen)
- t.IsBackground = True
- t.Start()
- Catch ex As Exception
- End Try
- End Sub
- Sub ÜbertrageScreen()
- While True
- While client.Connected = True
- Try
- Dim l As Int32 = breader.ReadInt32
- Dim b() As Byte
- b = breader.ReadBytes(l)
- PictureBox1.Image = ByteArray2Image(b)
- Catch ex As Exception
- End Try
- End While
- End While
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim main As New Thread(AddressOf Start)
- main.IsBackground = True
- main.Start()
- End Sub
- Public Function ByteArray2Image(ByVal ByAr() As Byte) As Image
- Dim img As Image
- Dim MS As New IO.MemoryStream(ByAr)
- 'das TRY ist Notwending, da wenn ein ARRAY eingelesen wird, welches KEIN Bild war,
- 'eine Exception auftritt!
- Try
- img = Image.FromStream(MS)
- Catch ex As Exception
- Return Nothing
- End Try
- Return img
- End Function
- End Class
Ist mehr oder weniger provisorisch. Funktioniert aber schon einwandfrei.
Jetzt, möchte ich die Serverfunktion in eine Extra Class auslagern und das Bild dann in die PictureBox1 laden.
Und genau da liegt das Problem...
Lagere ich die Annahme des Arrays (breader.Read) + die Umwandlung des Arrays ins Image (ByteArray2Image) in eine andere Klasse aus
und übergebe dann die Variable Image (also das umgewandelte Bild) der Form, bekomme ich kein Bild.
Hab's mehrmals überprüft: sowohl die Länge des Arrays (l) als auch die Bytes (b) kommen an, das Array wird in ein Image umgewandelt, aber nach wie vor
bekomme ich kein Bild zu sehen. Wie gesagt, wenn ich es so mache wie oben beschrieben, funktioniert es einwandfrei. Beim Auslagern in eine Class nicht.
Hoffe, dass mir hier vielleicht jemand helfen kann.
LG