Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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...

Geschrieben

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?

Geschrieben

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! ;)

Geschrieben

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.

Geschrieben

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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...