套接字 - Java没有以正确的编码接收字节

时间:2013-09-04 20:48:41

标签: java c++ sockets inputstream bufferedinputstream

我正在使用套接字并实现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 Class"有7到8个浮点值,没有成员函数。

Server 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类。 如您所见,我只检查前两个值,它们显示垃圾值。 请指出我的方向是正确的。

1 个答案:

答案 0 :(得分:0)

你自己编码和解码字节,所以你应该责怪这个,而不是Java。使用InputStream,而不是Reader,并直接处理字节。