Gast King555 Geschrieben 21. August 2002 Geschrieben 21. August 2002 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. Zitieren
Gnut Geschrieben 21. August 2002 Geschrieben 21. August 2002 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... Zitieren
Gast King555 Geschrieben 21. August 2002 Geschrieben 21. August 2002 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? Zitieren
Fallin Geschrieben 22. August 2002 Geschrieben 22. August 2002 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! Zitieren
Gast King555 Geschrieben 22. August 2002 Geschrieben 22. August 2002 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. Zitieren
Gast King555 Geschrieben 24. August 2002 Geschrieben 24. August 2002 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 Zitieren
Empfohlene Beiträge
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.