gpt4 book ai didi

java - 需要帮助用java从服务器读取数据

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:05 25 4
gpt4 key购买 nike

我在使用 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);


}

最佳答案

当我进行套接字工作时,总是让我困扰的是确保服务器和客户端上的顺序相反。

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

我的建议是这样做:

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;
}

关于java - 需要帮助用java从服务器读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093917/

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