私はソケットを使用し、Java サーバーと C++ クライアントを実装しています。クライアントはサーバーにクラスを送信しています。Javaサーバーはそれをバイト配列として受け取りますが、その後はクラスメンバーに変換し直していません。私はたくさん見ましたが、何を探すべきか本当にわからないと思います。これがコードの一部です。完全なコードはかなり大きいです
クライアント C++
IntVal temp;
Set(temp,values);
int tempp;
tempp=send(s_id,&temp,sizeof(temp),0);
if(tempp==-1)
{
printf("Sending Error \n");
}
「IntVal クラス」には、7 ~ 8 個の float 値があり、メンバー関数はありません。
サーバー Java
public static void main(String[] args) throws IOException {
// TODO code application logic here
Values values=new Values();
gui display=new gui();
display.setVisible(true);
ServerSocket Sock=new ServerSocket(9090);
try{
while(true){
System.out.println("Waiting");
Socket socket=Sock.accept();
System.out.println("Connected");
InputStream ins=socket.getInputStream();
InputStreamReader insr= new InputStreamReader(ins);
BufferedReader br=new BufferedReader(insr);
byte[]Array=br.readLine().getBytes("UTF-8");
// values.SetValues(Array);
//display.SetValues(values);
values.tWidth=Array[0];
values.waterLevel=Array[4];
values.camHeight=Array[8];
values.camViewAngleY=Array[12];
values.camViewAngleX=Array[16];
values.distFromCamBank=Array[20];
values.distTwoPoints=Array[24];
values.AvgVelocity=Array[28];
values.crossSecArea=Array[32];
values.Flow=Array[36];
values.camTiltAngle=Array[40];
values.aboveWater=Array[44];
System.out.println(values.tWidth);
System.out.println(values.waterLevel);
socket.close();
}
}
finally{
Sock.close();
}
}
}
ここで Class Values は、C++ クライアントの IntVal クラスに相当します。ご覧のとおり、最初の 2 つの値のみをチェックしています。それらはガベージ値を表示します。ここで間違っていることを正しい方向に向けてください。