在java中从服务器读取数据时需要帮助

时间:2011-02-23 16:40:31

标签: java byte bytebuffer

我在使用DataInputStreams时遇到了一些麻烦,

所以我有本地服务器的数据,我知道我读入的字节将遵循这种格式

0x01指定它是一个字符串

然后是随机的字节数

后跟0x00 0x00,

我无法从服务器上阅读,

这是我的阅读方法

    public static String convertFromServer(DataInputStream dis) throws IOException{
    //Buffer to hold bytes being read in
    ByteArrayOutputStream buf = new ByteArrayOutputStream();

    if(dis.read() != -1){
        //Check to see if first byte == 0x01
    if(dis.read() == 0x01){
        //Check if byte dosnt equal 0x00, i need it to check if it is actually 0x00 0x00
        while(dis.read() != 0x00){
            buf.write(dis.read());
        }
    }

    if(dis.read() == 0x03){    

        while(dis.read() != 0x00){

            buf.write(dis.read());
        }
    }
    }
    String messageRecevied = new String(buf.toByteArray());
    return messageRecevied;

}

如果我有点模棱两可,请告诉我。

我正在获取数据,它只是不完全正确,基本上我做的是发送一个字节数组,第一个元素是0x01指定字符串,然后字符串以字节为单位然后最后的最后2个元素是0x00和0x00,然后这个数据然后从服务器发回给我,服务器肯定收到数据,就在我回读它不正确的时候,信件会丢失

此代码写入格式为0x01的数据,然后是以字节为单位的消息,然后是0x00,0x00

  public static void writeStringToBuffer(ByteArrayOutputStream buf,String message){

    buf.write(0x01);

    byte[] b = message.getBytes();

    for(int i =1; i<message.getBytes().length+1;i++ ){

        buf.write(b[i-1]);

     }
    buf.write(0x00);
    buf.write(0x00);


}

1 个答案:

答案 0 :(得分:1)

当我正在进行套接字工作时总能得到我的东西是确保服务器和客户端上的订单相反。

如果服务器首先读取,则客户端必须先写入。如果服务器首先写入,则客户端必须先读取。如果他们都试图阅读或两者都试图写,你将不会得到任何输出。

我的建议是这样做:

if(dis.read() == 0x01) {
    int zeroesInARow = 0;

    while(zeroesInARow < 2) {
        int b = dis.read()
        if(b == 0x00) zeroesInARow++;
        else zeroesInARow = 0;
        buf.write(b);
    }
    String rawMessage = new String(buf.toArray());
    // take off the last two 0s
    String messageRecevied = rawMessage.substring(0,rawMessage.length()-2);
    return messageRecevied;
}