QTWebsocket / jwebsocket大数据问题

QtWebsocket / JWebsocket large data issue

本文关键字:数据 问题 jwebsocket QTWebsocket      更新时间:2023-10-16

我正在使用qtwebsocket服务器的C 应用程序,而在Android应用程序上使用了jwebsocket客户端。

当我发送一个大字符串(PNG文件为64个字符串)时,我只会收到1400个字符,您是否知道为什么?

也许我错过了一些东西,我读到我可以发送大数据,因为Websocket实施内部将它们分开。所以也许我错过了客户中的东西。

服务器端:

void WebSocketServer::sendImage(cv::Mat image)
{
    QtWebsocket::QWsSocket* client;
    uchar* datas = image.data;
    std::cout << image.cols * image.rows << std::endl;
    std::cout << "coucou" << std::endl;
    QString dataString;
    for (int i = 0; i < (image.cols * image.rows ) - 2 ; i++)
    {
        dataString += datas[i];
    }
    qDebug() << dataString;
    std::cout << "Sending an image" << std::endl;
    cv::Mat dst;
    cv::cvtColor(image, dst, CV_BGR2RGB);
    QImage imageAsQImage((uchar*)dst.data, dst.cols, dst.rows, QImage::Format_RGB32);

    QString encodedImage = encodeToBase64(imageAsQImage);
    foreach(client, clients)
    {
        client->write(encodedImage);
        //client->write(dataString);
    }
}

客户端:

public class WebSocketClient extends AsyncTask<String, Integer, Long> implements WebSocketClientTokenListener{
private BaseTokenClient btc;

public WebSocketClient() {
System.out.println("Creating a new websocket client");
btc = new BaseTokenClient();
btc.addListener(this);
btc.addListener(new RpcListener());
Rpc.setDefaultBaseTokenClient(btc);
Rrpc.setDefaultBaseTokenClient(btc);
}
...
    @Override
public void processPacket(WebSocketClientEvent arg0, WebSocketPacket arg1) {
if(arg0.getClient().getNegotiatedEncoding() == WebSocketEncoding.TEXT)
{
    // here is only the first 1400 chars...
    String response = arg1.getASCII();
}
}

谢谢!

您正在阅读不是完整消息的数据包。正如您提到的那样,WebSocket将数据流拆分为较小的数据包(帧)。

正如@kurt Pattyn所说,我正在阅读一个数据包,这不是完整的消息。我要求安托万·拉法格(Qtwebsocket创始人),他确认问题在客户端(jwebsocket)。

我如何解决它:我没有发现有关使用Jwebsocket读取帧的明确信息,因此我将LIB更改为此:https://github.com/koush/android-websockets

现在,我正确地将完整图像作为64编码字符串

正确检索