Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Visual Basic 6: Empfangende Bytes in vernünftige Strings umwandeln - Wie?

Empfohlene Antworten

Wenn ich 100 mal jeweils 6 Bytes empfange (mit dem Winsock Control), die als String (z.B. in einer Textbox) nur Fragezeichen darstellen, in IP Adressen umwandeln möchte (jeweils 6 Bytes = 1 IP Adresse, die Daten stellen natürlich auch richtige IP Adressen dar), wie wandele ich die Zeichen dann um?

Was genau ist eigentlich ein in VB empfangenes Byte? Wie ist das aufgebaut?

P.S.: In einem anderen VB Forum habe ich als Antwort bekommen, ich solle doch mal in der MSDN unter "Umwandlungsfunktionen" nachgucken. Das hat mir aber überhaupt nicht weitergeholfen.

als erstes würde jedes byte in hex oder Integer umwandeln...

mit Hex(byte) oder AscB(Byte)

dann wirst du vielleicht merken welches teil zu welchem der IP gehört...

Vielen Dank, das bringt mich schon etwas weiter. Ich empfange folgendes:

255

255

100

24

17

105

Zusammengesetzt wäre das 255.255.100.24:17105.

Die letzten beiden Bytes stellen sicher den Port da, aber einfach hintereinander schreiben ist falsch. Wie könnten die beiden letzten Bytes miteinander zusammenhängen? Der Port muss im Bereich 27000 bis 27100 liegen (ungefähr). Was könnte man also mit den beiden letzten Zahlen machen, um einen vernünftigen Port zu erhalten?

Und nochwas: Die IP Adresse sollte eigentlich richtig sein, aber Sie ist ungültig (das heisst, zur Zeit nicht benutzt). Vielleicht muss man das doch irgendwie anders machen?

Also, wenn ich mir das ganze so betrachte, können die IPs auch nicht so ganz stimmen, denn die 255 ist nur für die Broadcastaddresse vorgesehen. Daher kannst Du sicher diese auch nicht anpingen. Hast Du eine Möglichkeit, die IPs vor dem versenden in "normaler" ansicht zu sehen? Wenn ja, vergleiche einfach mal die Werte. Der Port kann auch eine zusammenhängende HexZahl sein. Das würde auch mit den Portbereich zusammenkommen (FF FF = 65535). Was noch zu bemerken ist, Hexzahlen sind meist gedreht. Wenn man das mal umrechnetn 17 dec = 11 hex, 105 dec = 69 hex. Daraus folgt Hex: 69 11. Wenn man das jetzt auf dezimal umrechnet bekommt man einen Port von 26897. Es wäre mal ganz gut, wenn Du mal Deinen Code posten könntest, das würde die Sache etwas erleichtern! ;)

Ich kann mir die IPs leider nicht VOR dem Versenden angucken, ich habe nur das, was ich empfange, sonst nichts. Hier ist mein bisheriger Code:

Option Explicit

Private Sub Command1_Click()

Text2.Text = ""

Winsock1.Close

Winsock1.Connect Winsock1.RemoteHost, Winsock1.RemotePort

DoEvents

Winsock1.SendData Asc("c")

DoEvents

End Sub

Private Sub getIPs(empfDaten As Variant)

Dim i As Integer

Dim x As Integer

x = 10

For i = 0 To 100

Clipboard.Clear

Clipboard.SetText AscB(Mid$(empfDaten, 1 + i + x, 1)) & "." & _

AscB(Mid$(empfDaten, 2 + i + x, 1)) & "." & _

AscB(Mid$(empfDaten, 3 + i + x, 1)) & "." & _

AscB(Mid$(empfDaten, 4 + i + x, 1)) & ":" & _

AscB(Mid$(empfDaten, 5 + i + x, 1)) & _

AscB(Mid$(empfDaten, 6 + i + x, 1))

Text2.Text = Text2.Text & vbCrLf & Clipboard.GetText

Next i

End Sub

Private Sub Winsock1_Connect()

Text2.Text = Text2.Text & "Connected" & vbCrLf

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim data As Variant

Winsock1.GetData data

getIPs data

End Sub

Auf dem Formular befindet sich ein Winsock Control (Winsock1), ein Button (Command1) und eine Textbox (Text2). Ich baue eine Verbindung über UDP zu half-life.east.won.net:27010 auf.

Kann mir denn echt keiner helfen? Ich habe immer noch nicht rausgefunden, wie es funktioniert. Ich poste jetzt nochmal einiges, vielleicht weiß dann ja jemand eine Lösung.

Also:

Man sendet folgendes:

(byte) ASCII '1' (31h)

(int32) Abfrageposition

(string) Filter (für CS-Server "\gamedir\cstrike")

Man empfängt folgendes:

(int32) -1

(byte) 66h Identifikation

(byte) 0Dh ???

(int32) Nächste Abfrageposition

(* bytes) Die restlichen Daten sind die Server. Immer 6 Bytes bilden eine Serveradresse:

(4 x byte) ip address

(int16) port #

Mein bisheriger Code (ja, ziemlich unordentlich, ich weiß):

Option Explicit

Private Sub Command1_Click()

Text2.Text = ""

Winsock1.Close

Winsock1.Connect Winsock1.RemoteHost, Winsock1.RemotePort

DoEvents

Winsock1.SendData Asc("c")

'Winsock1.SendData 1 & 0 & "\gamedir\cstrike"

'Winsock1.SendData "c" & "1000" & "\gamedir\cstrike"

'Winsock1.SendData "e" & "2000"

'Winsock1.SendData "1" & "1" & "\gamedir\cstrike"

DoEvents

End Sub

Private Sub getIPs(empfDaten As Variant)

On Error Resume Next

Dim i As Integer

Dim x As Integer

x = 11

For i = 0 To 100

Clipboard.Clear

Clipboard.SetText AscB(Mid$(empfDaten, 1 + i + x, 1)) & "." & _

AscB(Mid$(empfDaten, 2 + i + x, 1)) & "." & _

AscB(Mid$(empfDaten, 3 + i + x, 1)) & "." & _

AscB(Mid$(empfDaten, 4 + i + x, 1)) & ":" & _

AscB(Mid$(empfDaten, 5 + i + x, 1)) & _

AscB(Mid$(empfDaten, 6 + i + x, 1))

Text2.Text = Text2.Text & vbCrLf & Clipboard.GetText

Next i

End Sub

Private Sub Winsock1_Connect()

Text2.Text = Text2.Text & "Connected" & vbCrLf

End Sub

Private Sub ips(query)

Dim TheIP As String

Dim c As Integer

Dim i As Integer

c = 7

For i = 1 To 100

TheIP = ""

TheIP = CStr(AscB(Mid(query, c, 1)))

c = c + 1

TheIP = TheIP + "." + CStr(AscB(Mid(query, c, 1)))

c = c + 1

TheIP = TheIP + "." + CStr(AscB(Mid(query, c, 1)))

c = c + 1

TheIP = TheIP + "." + CStr(AscB(Mid(query, c, 1)))

c = c + 1

TheIP = TheIP & ":" & Hex(AscB(Mid(query, c, 1))) & Hex(AscB(Mid(query, c, 1)))

c = c + 2

Text2.Text = Text2.Text & vbCrLf & TheIP

Next i

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim data As Variant

Dim test As String

Dim pos As String

Dim i As Integer

Winsock1.GetData data

MsgBox data

ips data

Exit Sub

test = Mid$(data, 7, 4)

pos = ""

For i = 1 To 4

pos = pos & AscB(Mid$(test, i, 1)) And 255

Next i

MsgBox pos

'ips data

End Sub

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.