在vb6中发送\ r \ n以获取http响应

时间:2016-06-07 20:52:59

标签: html5 websocket vb6

我正在尝试在VB6中编写一个websocket服务器,现在我发现我没有在响应中发送\r\n,我怎么在VB6中这样做? vbNewLinevbCr & vbLf不起作用。

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
    Dim guid
    guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"


    Winsock1.GetData sData
    request.Text = sData
    Dim aintCount()
     Dim pos As Integer
    Dim entry() As String
    Dim entry2() As String

    entry = Split(sData, vbCrLf, , vbTextCompare)

    pos = 0




    Do While pos < UBound(entry)
        If Trim$(entry(pos)) <> "" Then
        'Text3.Text = entry(pos)
            entry2 = Split(entry(pos), ":", , vbTextCompare)
            If entry2(0) = "Sec-WebSocket-Key" Then
            Text3.Text = Trim(entry2(1) & guid)

            End If
        End If
        pos = pos + 1
    Loop




    Dim Packet() As Byte

    'Dim response As Byte() = System.Text.Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" & Environment.NewLine & "Connection: Upgrade" & Environment.NewLine & "Upgrade: websocket" & Environment.NewLine & "Sec-WebSocket-Accept: " & Convert.ToBase64String(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(New Regex("Sec-WebSocket-Key: (.*)").Match(data).Groups(1).Value.Trim() & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))) & Environment.NewLine & Environment.NewLine)

    crypt.EncodingMode = "base64"
    crypt.HashAlgorithm = "sha1"



    'Text1.Text = crypt.HashBytesENC(Bytes)
        Bytes = StrConv(Trim(entry2(1) & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"), vbFromUnicode)
        Text1.Text = crypt.HashBytesENC(Bytes)
         '"HTTP/1.1 101 Switching Protocols" & Environment.NewLine & "Connection: Upgrade" & Environment.NewLine & "Upgrade: websocket" & Environment.NewLine & "Sec-WebSocket-Accept: "
    Packet = "HTTP/1.1 101 Switching Protocols" & Crlf & "Connection: Upgrade" & Crlf & "Upgrade: WebSocket" & Crlf & "Sec-WebSocket-Accept: " & crypt.HashBytesENC(StrConv(Trim(entry2(1) & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"), vbFromUnicode)) & vbCr & vbLf

        'Packet = Packet & "Upgrade: WebSocket" & vbCr & vbNewLine
        'Packet = Packet & "Connection: Upgrade" & vbCr & vbNewLine
        'Packet = Packet & "Sec-WebSocket-Accept: " & crypt.HashBytesENC(Bytes) & vbCr & vbNewLine

        'Data = Empty
       response.Text = Packet
    Winsock1.SendData Packet
End Sub

1 个答案:

答案 0 :(得分:0)

我尝试使用OP中的最小代码来提供示例。我不知道crypt函数返回的是什么。您很可能也希望将其包含在StrConv函数中。如果是这样,那将使它变得更容易,因为您不必加密和连接字符串。你可能会看起来像response.Text来确定你是否需要对各个部分进行StrConv,或者你是否可以在整个字符串上进行。

...

    Dim Packet() As Byte

    crypt.EncodingMode = "base64"
    crypt.HashAlgorithm = "sha1"

    Bytes = StrConv(Trim(entry2(1) & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"), vbFromUnicode)
    Text1.Text = crypt.HashBytesENC(Bytes)

    'Either
    Packet = StrConv("HTTP/1.1 101 Switching Protocols" & vbCrLf & "Connection: Upgrade" & vbCrLf & "Upgrade: WebSocket" & vbCrLf & "Sec-WebSocket-Accept: ", vbFromUnicode) & crypt.HashBytesENC(StrConv(Trim(entry2(1) & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"), vbFromUnicode)) & StrConv(vbCrLf, vbFromUnicode)

    'Or
    Packet = StrConv("HTTP/1.1 101 Switching Protocols" & vbCrLf & "Connection: Upgrade" & vbCrLf & "Upgrade: WebSocket" & vbCrLf & "Sec-WebSocket-Accept: " & crypt.HashBytesENC(StrConv(Trim(entry2(1) & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"), vbFromUnicode)) & vbCrLf, vbFromUnicode)

    response.Text = StrConv(Packet, vbUnicode)
    Winsock1.SendData Packet

...