【发布时间】:2014-02-05 10:01:13
【问题描述】:
我正在使用带有 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();
}
}
谢谢!
【问题讨论】: