3

こんにちは、このスレッドから読み取る WebSocket フレームを実装しました サーバー側で WebSocket メッセージを送受信するにはどうすればよいですか? 、 本当にありがとう。

ハンドシェイクの実装に成功しました。ブラウザから Java へのメッセージの受信とフレームの読み込みに成功しました。

これが送信時のJavaでの私の実装です。

public void brodcast(String mess) throws IOException{
    byte[] rawData = mess.getBytes();

    int frameCount  = 0;
    byte[] frame = new byte[10];

    frame[0] = (byte) 129;

    if(rawData.length <= 125){
        frame[1] = (byte) rawData.length;
        frameCount = 2;
    }else if(rawData.length >= 126 && rawData.length <= 65535){
        frame[1] = (byte) 126;
        byte len = (byte) rawData.length;
        frame[2] = (byte)((len >> 8 ) & (byte)255);
        frame[3] = (byte)(len & (byte)255); 
        frameCount = 4;
    }else{
        frame[1] = (byte) 127;
        byte len = (byte) rawData.length;
        frame[2] = (byte)((len >> 56 ) & (byte)255);
        frame[3] = (byte)((len >> 48 ) & (byte)255);
        frame[4] = (byte)((len >> 40 ) & (byte)255);
        frame[5] = (byte)((len >> 32 ) & (byte)255);
        frame[6] = (byte)((len >> 24 ) & (byte)255);
        frame[7] = (byte)((len >> 16 ) & (byte)255);
        frame[8] = (byte)((len >> 8 ) & (byte)255);
        frame[9] = (byte)(len & (byte)255);
        frameCount = 10;
    }

    int bLength = frameCount + rawData.length;

    byte[] reply = new byte[bLength];

    int bLim = 0;
    for(int i=0; i<frameCount;i++){
        reply[bLim] = frame[i];
        bLim++;
    }
    for(int i=0; i<rawData.length;i++){
        reply[bLim] = rawData[i];
        bLim++;
    }

    out.write(reply);
    out.flush();

}

この関数を broadcast("Hello world"); のように呼び出すと、サーバーはすぐにメッセージをブロードキャストし、ブラウザーは情報を受信して​​表示します。すぐにソケットが閉じて、「ソフトウェアが原因で接続が中止され、ソケット書き込みエラーが発生しました」がスローされます。あとでメッセージを送信できません。

4

0 に答える 0