gpt4 book ai didi

java - 在客户端/服务器应用程序中阻止 c 中的读取函数

转载 作者:行者123 更新时间:2023-11-30 15:19:55 25 4
gpt4 key购买 nike

我目前正在开发平板电脑(客户端)和 MAC/PC(服务器)之间的客户端/服务器架构。我正在两侧进行一些实时渲染,我需要两者之间的通信。

问题是我需要对从客户端获得的字符串(基本上是一个旋转矩阵)进行一些操作。因此,该字符串最多为 16 个 float 字,我之前将其转换为逗号分隔值字符串。因此,我应该从客户那里得到的是这样的:

1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0

在服务器端,我对该字符串进行一些处理,以将旋转矩阵返回为包含 16 个元素的 float 组。问题是有时我从服务器端的客户端一次获取的元素不止 16 个。例如我得到

1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0

因此,当我尝试拆分它时,我超出了 16 个元素的限制,这对我来说一点也不好。我的问题是:有没有一种方法可以防止服务器和/或客户端一次读取/发送多个完整矩阵?由于我使用平板电脑和一些实时渲染,我希望能够节省尽可能多的处理能力。

这是我正在使用的代码(只是 fragment ,因为文件很大)

客户:

if (connected == true && matrixupdated == true && this.hasMatrixChanged()){
try {
this.inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
this.outToServer= new DataOutputStream(clientSocket.getOutputStream());
this.sentence = this.getStringFromMatrix();
outToServer.writeBytes(sentence + '\n');
this.hasServerProcessed = false ;
System.arraycopy(matrix, 0, previousMatrix, 0, 16); //I check whether the matrix changes enough for me to send it to the server
}catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
this.matrixupdated = false ;

服务器:

while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
{
smatrix = client_message ; //smatrix is a true c++ string
pthread_mutex_lock(&mymutex);
pthread_cond_wait(&mycondition, &mymutex); // prevent real-time rendering to try and use the matrix at the same time as this function
std::stringstream ss(smatrix);
while(std::getline(ss, tok, ',')) {
matrix[i] = ::atof(tok.c_str());
i++ ;
}
i = 0 ;
pthread_mutex_unlock(&mymutex);
}

最佳答案

按设计工作。 TCP是一种字节流协议(protocol)。没有消息边界。如果您想要消息,您必须自己实现它们。

关于java - 在客户端/服务器应用程序中阻止 c 中的读取函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com