сокеты — Как я могу отправить много матриц с сервера на клиент одновременно и наоборот в c ++ с использованием TCP / IP?

У меня в коде два вызова на стороне сервера для двух функций sendMatrixPos а также sendMatrixTrack отправить две матрицы последовательно. и я отправил матрицы еврей фрам клиенту

сервер

void MyTestPlugin::sendMSGP()
{
if(!connected)
return;
if ( (numbytes = send(client_skt, buf, 16*sizeof(float) ,0)) == -1){
std::cerr<<"server, normal send error"<<std::endl;
exit(1);
}
}

void MyTestPlugin::sendMSGT()
{
if(!connected)
return;
if ( (numbytes = send(client_skt, trackBuf, 16*sizeof(float) ,0)) == -1){
std::cerr<<"server, normal send error"<<std::endl;
exit(1);
}
}

void MyTestPlugin::sendMatrixPos()
{
if(!connected)
return;

Matrixd transNode = PluginHelper::getObjectMatrix();

for (int i=0; i<4; ++i)
for (int j=0; j<4; ++j)
matrixP[i*4+j] = transNode(i,j);

for(int i=0; i<16; i++)
{
cerr <<"matrixP:" << i << "   " << matrixP[i] << endl;
}

memcpy(buf,matrixP,sizeof(float)*16);
sendMSGP();
}

void MyTestPlugin::sendMatrixTrack()
{

if(!connected)
return;
Matrixd trackNode = PluginHelper::getHeadMat(1);

for (int i=0; i<4; ++i)
for (int j=0; j<4; ++j)
matrixT[i*4+j] = trackNode(i,j);

for(int i=0; i<16; i++)
{
cerr <<"matrixT:" << i << "   " << matrixT[i] << endl;
}

memcpy(trackBuf,matrixT,sizeof(float)*16);
sendMSGT();
}

void MyTestPlugin::preFrame()
{
sendMatrixPos();
sendMatrixTrack();
}

С другой стороны, у меня есть два вызова клиента для функции, чтобы получать две матрицы последовательно от сервера каждый кадр.

клиент

void osgMain::draw()
{
recvMSG();
...
recvMSG();
}void osgMain::recvMSG()
{
numbytes = recv(client_skt, buf, bufferSize,0);
if ( numbytes == -1 ){
//__android_log_print(ANDROID_LOG_ERROR,"jni client","recv error");
//exit(1);
}
else
{
memcpy (matrix, buf, numbytes);
}
}

Я использовал протокол TCP / IP. Мне нужно отправить две матрицы и получить их одновременно (не последовательно). Как я могу сделать этот шаг? или как я могу отправить две матрицы одновременно?

BUFFERSIZE 1024 на стороне клиента, а также 1024 на стороне сервера …

-1

Решение

Ваша передача будет ограничена «размером сетевого канала» — если у вас нет сетевой карты 40 Гбит / с, маловероятно, что вы выиграете от попыток отправки данных параллельно — вы просто усложните свой код — пока ваш код написан для асинхронной отправки / получения, это то, что вам нужно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]