我正在尝试在VB6中编写一个websocket服务器,现在我发现我没有在响应中发送\r\n
,我怎么在VB6中这样做? vbNewLine
和vbCr & 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
答案 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
...