Remote Desktop - Bild will nicht. D:

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

The_Nici

Betreff: Remote Desktop - Bild will nicht. D:

BeitragMi, Jul 15, 2009 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich versuche ein Bild über das Internet zu übertragen, per UDP in einem 100Mbit/s LAN.
Hier mal der Code:
BlitzBasic: [AUSKLAPPEN]

;SENDEN
Function SendDesktopImage()
GetDesktopBuffer()
For y = 0 To gfy - 1
For x = 0 To gfx - 1
rgb% = GetDesktopPixel(x,y)
a = (rgb And $FF000000)/$1000000
r = (rgb And $FF0000)/$10000
g = (rgb And $FF00)/$100
b = rgb And $FF
PokeByte(desktopbank,3*(x + y *gfx),r)
PokeByte(desktopbank,3*(x + y *gfx) + 1,g)
PokeByte(desktopbank,3*(x + y *gfx) + 2,b)
Next
Next
For i = 0 To BankSize(desktopbank) - 1
WriteByte udpstream, PeekByte(desktopbank, i)
;If i = 65507 Then
; SendUDPMsg(udpstream, remoteip%, 9765)
;EndIf
Next
SendUDPMsg(udpstream,remoteip%,9765)
End Function

;-----------------------
;EMPFANGEN
While Not KeyHit(1)
rcvmsg = RecvUDPMsg(udpstream)
If rcvmsg <> 0 Then
SetBuffer ImageBuffer(img)
LockBuffer ImageBuffer(img)
For y = 0 To gfy - 1
For x = 0 To gfx - 1
clr% = 255*$1000000 + ReadByte(udpstream)*$10000 + ReadByte(udpstream)*$100 + ReadByte(udpstream)
;Stop
WritePixelFast(x,y,clr%,ImageBuffer( img ))
Next
Next
UnlockBuffer ImageBuffer(img)
SetBuffer BackBuffer()
EndIf
DrawImage img, 0,0
Flip 0
Cls
WaitTimer frametimer
Wend


Was jedoch ankommt sind nur 10 Pixel am oberen linken Bildschirmrand. Jedoch stopf ich da doch ein ganzes Bild rein? Surprised
Datenverlust per UDP isses nicht, es ist 127.0.0.1 zu 127.0.0.1, und verarschen kann ich mich auch selbst, es werden wohl kaum immer die gleichen x-tausend bits verloren gehen.

MfG und schonmal danke für die hoffentlich kompetente Hilfe Smile
  • Zuletzt bearbeitet von The_Nici am Mi, Jul 15, 2009 23:08, insgesamt einmal bearbeitet

TimBo

BeitragMi, Jul 15, 2009 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
HI,

kommen 0 en an oder NULL ?

Komisch ist das schon..

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

The_Nici

BeitragMi, Jul 15, 2009 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Problem gefunden. Zu fettes UDP-Datenpaket. 6MB mal in einem UDP-Paket rüberwurschteln is halt nicht. ;D
Achja, es kam weder 0 noch NULL an, sondern nur ein paar einsame Pixel, welche wohl Byteartefakte waren. Very Happy

MfG

TimBo

BeitragMi, Jul 15, 2009 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
cool, das du das gefunden hast,

wieviele Bytes passen denn in ein UDP Paket -interressant !

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

The_Nici

BeitragMi, Jul 15, 2009 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf Wikipedia steht 65507 bytes, jedoch stimmt dies irgendwie nicht in BlitzBasic, ich übertrage jetzt einfach 1024-er Datenpakete, sammel die dann wieder und werte sie aus.
MfG

TimBo

BeitragMi, Jul 15, 2009 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht wegen dem Header ?
dann müssten auch 65.000 gehen oder ? ka

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

The_Nici

BeitragMi, Jul 15, 2009 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
de.wikipedia.org hat Folgendes geschrieben:
[...]UDP übernimmt die Eigenschaften der darunterliegenden Vermittlungsschicht. Im Falle des Internet Protocols (IP) können Datenpakete maximal 65535 Bytes lang sein, wovon der IP-Header und UDP-Header insgesamt mindestens 28 Bytes belegen. UDP-Datagramme haben daher maximal 65507 Nutzdatenbytes. Solche Pakete werden jedoch von IP fragmentiert übertragen.[...]

Ohne Header. ;>
ich habe keine Ahnung warum das nicht geht, aber der letzte Satz des Zitates mag vielleicht etwas bedeuten, kA.

Xaymar

ehemals "Cgamer"

BeitragMi, Jul 15, 2009 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
die pakete werden verkleinert. man muss diese erst defragmentieren(auch splitten genannt)

Edit: und udp hat einen header. wireshark anschmeißen und mal nen udp stream angucken, da siehste den:)
Warbseite

The_Nici

BeitragMi, Jul 15, 2009 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe nie behauptet UDP habe keinen Header. Lies doch, was ich schreib.

Duempel

BeitragMi, Jul 15, 2009 23:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
wovon der IP-Header und UDP-Header insgesamt mindestens 28 Bytes belegen. UDP-Datagramme haben daher maximal 65507 Nutzdatenbytes.


Dort ist ja nur geschrieben, dass der IP- und UDP-Header insgesamt mindestens 28 Bytes belegen.
Wenn die Header mehr belegen haben die UDP-Datagramme nichtmehr die maximalen 65507 Nutzdatenbytes.

Tankbuster

BeitragDo, Jul 16, 2009 0:40
Antworten mit Zitat
Benutzer-Profile anzeigen
UDP ist ja nur ein kleines untergeordnetes Protokoll der Netzwerk-Transportschicht.

Eine UDP-Nachricht ist daher grob so aufgebaut:

Ethernet-"Header" + IPv4-Header + UDP-Header + Msg

Ein Ethernet Paket fasst nur 1500 Bytes. Daher ist es auch sinnvoll, nur soviele in ein Packet zu packen. Dabei solltest du den IP-Header und UDP-Header, sowie Ethernet-"Header" berücksichtigen, und natürlich die Nachricht. Also alles garnicht so einfach Wink

Am besten du versendest immer so 500 Bytes per UDP in einem Packet. Wenn du im Ethernet Frame mehr als 1500 erreichst, dann wird das Packet gesplittet, und es besteht eine große Chance, dass die hälfte der Nachricht verloren geht. Wink

Für weitere Infos:

http://de.wikipedia.org/wiki/Ethernet
Twitter
Download Jewel Snake!
Windows|Android

Xaymar

ehemals "Cgamer"

BeitragDo, Jul 16, 2009 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
The_Nici hat Folgendes geschrieben:
Ich habe nie behauptet UDP habe keinen Header. Lies doch, was ich schreib.


hab ich doch...

The_Nici hat Folgendes geschrieben:
Ohne Header. ;>
Warbseite

Nova

BeitragDo, Jul 16, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Er meint damit nicht, dass UPD allgemein keinen Header hat. Wink
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

The_Nici

BeitragDo, Jul 16, 2009 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann lies den Post vorher, CGamer, ich meinte es sind x bytes OHNE dem header, nicht, dass UDP ohne Header ist.

Tankbuster

BeitragDo, Jul 16, 2009 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nja, man sollte mit UDP immer nur soviel senden, dass
Nachricht+UDP-Header+IPv4-Header+Ethernet-"Header" immer <= 1500 Bytes groß ist.

Sonst kann wie gesagt die Hälfte eines Blitz-SendUDPMsg-"Paketes" auchmal fehlen.


EDIT:
Du kannst in ein UDP-Packet 1416 Bytes schreiben. Meist wird der IPv4-Header aber nicht voll genutzt, deshalb kann man noch ~40 Bytes draufrechnen.

Edit: Ich hoffe, ich konnte helfen (=
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group