Ich habe (wie gesagt) es schon geschafft die Verbindung zum Server zu öffnen und aufrecht zu erhalten.
Nur habe ich ein Problem die empfangenen Nachrichten zu entschlüsseln/decoden.
Die Funktionen die ich benutze geben keine gültigen/auswertbare Zeichenketten zurück.
Ich hoffe ihr habt da irgendwelche Lösungsvorschläge.
Einige Funktionen/Teile des Scripts wurden aus anderen Foren kopiert und verändert um einen Client statt einem Server zu bilden.
Hier die Funktionen die euch sicherlich interessieren werden:
Code:
Func _EncodeWebSocketPacket($sPacket) Local $aFrame[4], $sEncoded, $iData_Length, $iFrameSize, $iIndex $sEncoded = "" $aFrame[0] = 129 $iData_Length = StringLen($sPacket) If $iData_Length <= 125 Then $aFrame[1] = $iData_Length $iFrameSize = 1 Else $aFrame[1] = 126 $aFrame[2] = BitShift($iData_Length, 8) ;Bit verschiebung um n (z.B. 8) Bits nach rechts. $aFrame[3] = BitAND($iData_Length, 255) ;Addiert die Bit von $iData_Length mit 11111111. $iFrameSize = 3 EndIf For $iIndex = 0 To $iFrameSize $sEncoded &= Chr($aFrame[$iIndex]) Next $sEncoded &= $sPacket Return $sEncoded EndFunc Func _DecodeWebSocketPacket($sPacket) Local $sBytes, $iData_Length, $sMask, $sEncoded, $sDecoded $sBytes = $sPacket $iData_Length = BitAND(Asc(_SubString($sBytes, 1, 1)), 127) ;Lösche das erste Bit $sDecoded = "" If $iData_Length = 126 Then $sMask = _SubString($sBytes, 4, 8) $sEncoded = _SubString($sBytes, 8) ElseIf $iData_Length = 127 Then $sMask = _SubString($sBytes, 10, 14) $sEncoded = _SubString($sBytes, 14) Else $sMask = _SubString($sBytes, 2, 6) $sEncoded = _SubString($sBytes, 6) EndIf $iIndex = 0 Do $sDecoded &= Chr(BitXOR(Asc(_SubString($sEncoded, $iIndex, 1)), Asc(_SubString($sMask, Mod($iIndex, 4), 1)))) ;Verwende das Byte $iIndex von $sEncoded und das Byte $iIndex welches beim Mod 4 ermittelt wird von $sMask ;Mache daraus einen Ascii-Code und errechne den XOR wert der beiden Bytes. Dann wandle das ganze wieder in einen Lesbaren Character um. $iIndex += 1 Until $iIndex > StringLen($sEncoded)-1 Return $sDecoded EndFunc Func _SubString($sString, $iBeginn, $iCount = 0);Ja ich weiss das es eine ähnliche Funktion in AutoIt gibt, fiel mir aber zuspät ein. If $iBeginn < 0 Then Return StringRight($sString, ($iBeginn*-1)) EndIf If $iBeginn > 0 Then $sString = StringTrimLeft ($sString, $iBeginn) EndIf If $iCount = 0 Then $iCount = StringLen($sString) EndIf Return StringLeft($sString, $iCount) EndFunc