简体   繁体   中英

How to send message to WebSocket in VB.NET?

How can i send a message from my WinForm VB.NET project to my WebSocket?

Actually i was able to do it by sending proper byte data to the NetworkStream in c# via the following code in c# which codify the string message to byte array:

private static byte[] EncodeMessageToSend(string message)
{
    byte[] response;
    byte[] bytesRaw = Encoding.UTF8.GetBytes(message);
    byte[] frame = new byte[10];

    int indexStartRawData = -1;
    int length = bytesRaw.Length;

    frame[0] = (Byte)129;
    if (length <= 125)
    {
        frame[1] = (Byte)length;
        indexStartRawData = 2;
    }
    else if (length >= 126 && length <= 65535)
    {
        frame[1] = (Byte)126;
        frame[2] = (Byte)((length >> 8) & 255);
        frame[3] = (Byte)(length & 255);
        indexStartRawData = 4;
    }
    else
    {
        frame[1] = (Byte)127;
        frame[2] = (Byte)((length >> 56) & 255);
        frame[3] = (Byte)((length >> 48) & 255);
        frame[4] = (Byte)((length >> 40) & 255);
        frame[5] = (Byte)((length >> 32) & 255);
        frame[6] = (Byte)((length >> 24) & 255);
        frame[7] = (Byte)((length >> 16) & 255);
        frame[8] = (Byte)((length >> 8) & 255);
        frame[9] = (Byte)(length & 255);

        indexStartRawData = 10;
    }

    response = new Byte[indexStartRawData + length];

    Int32 i, reponseIdx = 0;

    //Add the frame bytes to the reponse
    for (i = 0; i < indexStartRawData; i++)
    {
        response[reponseIdx] = frame[i];
        reponseIdx++;
    }

    //Add the data bytes to the response
    for (i = 0; i < length; i++)
    {
        response[reponseIdx] = bytesRaw[i];
        reponseIdx++;
    }

    return response;
}

Then i jsut used that code with stream.Write but what will be an equivalent code in VB? or is there another way to send a message to the WebSocket?

PS: the websocket doesn't accept a simple string or a simple string converted to byte[] i've yet tryed it.

I send a message over a websocket by using System.Net.Websockets.Websocket which has an asynchronous send function:

Dim bytes = Encoding.UTF8.GetBytes(message)
Await socket.SendAsync(New ArraySegment(Of Byte)(bytes, 0, bytes.length), Websockets.WebsocketMessageType.Text, True, cancelToken)

Note that chunking may be required depending on the maximum frame size; if so, send each chunk but the last with the penultimate parameter as False and adjust the initial position and length of the array segment accordingly.

(Addendum: I've just noticed that the initial position and segment length are not required in the ArraySegment(Of Byte) construction if making it out of the whole array, but I'm going to leave it in place here because it will be clearer what changes would need to be made to chunk the message.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM