da tcp/ip, bzw. sockets für mich noch neugebiet sind, sie aber zweifelsohne zu den grundlagen gehören, versuche ich das ganze mal zu erlernen.....
das bitmap zu serailzen, sowie deserializen stellt kein problem dar - auch das senden des ganzen byte-arrays dürfte funktinoieren. das empfangen udn zusammenstückeln der einzelnen datenpakete bereitet mir aber probleme.
das resultierende empfangene byte-array lässt sich nihct wieder in ein bitmap umwandeln - muss also im laufe des sendevorganges beschädigt worden sein.
da das ganze nach dem zufallsprinzip mal funktioniert und mal nicht, ich den fehler auch nicht wirklich weiter eingrenzen konnte, bitte ich euch mal um rat.
folgender ansatz:
sendevorgang
empfang
das andauernde redimmen des arrays ist nur ein schneller schuss aus der hüfte - wird im endeffekt vermutlich durch eine arraylist ersetzt....
der vollständigkeit halber:
(de)serialize bitmap
das bitmap zu serailzen, sowie deserializen stellt kein problem dar - auch das senden des ganzen byte-arrays dürfte funktinoieren. das empfangen udn zusammenstückeln der einzelnen datenpakete bereitet mir aber probleme.
das resultierende empfangene byte-array lässt sich nihct wieder in ein bitmap umwandeln - muss also im laufe des sendevorganges beschädigt worden sein.
da das ganze nach dem zufallsprinzip mal funktioniert und mal nicht, ich den fehler auch nicht wirklich weiter eingrenzen konnte, bitte ich euch mal um rat.
folgender ansatz:
VB.NET-Quellcode
- Dim clientSocket As New System.Net.Sockets.TcpClient()
- Dim serverStream As NetworkStream
- clientSocket.Connect("127.0.0.1", 930)
- serverStream = clientSocket.GetStream()
- Dim rect As Rectangle = My.Computer.Screen.Bounds
- Dim bmp As Bitmap = New Bitmap(rect.Width, rect.Height)
- Dim g As Graphics = Graphics.FromImage(bmp)
- g.CopyFromScreen(0, 0, 0, 0, bmp.Size)
- Dim buffer() As Byte = Serialize(bmp)
- serverStream.Write(buffer, 0, buffer.Length)
- serverStream.Flush()
VB.NET-Quellcode
- Private ipAdress As IPAddress = Dns.GetHostAddresses("127.0.0.1")(0)
- private listener As New TcpListener(ipAdress, 930)
- Private client As TcpClient
- Private network As NetworkStream
- listener.Start()
- client = listener.AcceptTcpClient()
- network = client.GetStream()
- Dim length As Long = 0
- Dim store() As Byte
- Dim bmp As Bitmap
- Do
- ReDim Preserve store(length + client.ReceiveBufferSize - 1)
- network.Read(store, length, client.ReceiveBufferSize)
- length = store.Count()
- Loop While network.DataAvailable
- bmp = Deserialize(store)
das andauernde redimmen des arrays ist nur ein schneller schuss aus der hüfte - wird im endeffekt vermutlich durch eine arraylist ersetzt....
der vollständigkeit halber:
VB.NET-Quellcode
- Private Function Serialize(ByVal data As Image) As Byte()
- Dim M As New IO.MemoryStream
- data.Save(M, System.Drawing.Imaging.ImageFormat.Bmp)
- M.Flush()
- Return M.ToArray()
- End Function
- Private Function Deserialize(ByVal data As Byte()) As Image
- Dim m As IO.MemoryStream = New IO.MemoryStream(data)
- Dim bm As Image = Image.FromStream(m)
- Return bm
- End Function