gpt4 book ai didi

Java socket监听加载问题

转载 作者:行者123 更新时间:2023-11-29 09:25:44 25 4
gpt4 key购买 nike

我用 Java 做了一个套接字监听器,它在两个端口上监听数据并对监听的数据进行操作。现在的场景是这样的,当监听器和传输数据的设备都启动并运行时,监听器接收数据,一次一个(每个数据以“#S”开头,以“.”结尾)以及何时监听器未启动或未在监听,设备将数据存储在其本地内存中,一旦监听器启动,它就会以附加形式发送所有数据,例如:

"#S ...DATA...[.]#S...DATA...[.]..."

现在我的实现方式是,无论监听器在任一端口上获得什么数据,它都会转换为十六进制形式,然后对输入数据的十六进制格式进行操作。“#S 的十六进制形式"是 "2353"和 "."的十六进制形式。是“2e”。处理输入数据的十六进制转换形式的代码如下。hexconverted1 是一个字符串,其中包含来自任何端口的整个输入数据的十六进制转换形式。

String store[];
store=hexconverted1.split("2353");
for(int m=0;m<store.length;m++)
store[m]="2353"+store[m];

PrintWriter out2 = new PrintWriter(new BufferedWriter(new FileWriter("C:/Listener/array.bin", true)));
for(int iter=0;iter<store.length; iter++)
out2.println(store[iter]);
out2.close();

我试图通过上面的代码完成的是,每当一堆数据到达时,我试图扫描数据并从这堆数据中提取每一个数据并存储在一个字符串数组中,以便我希望对数据的十六进制转换形式执行的操作可以以更简单的方式完成。因此,当我将数组的内容写入 BIN 文件时,相同输入的输出会有所不同。当我发送 280 个数据包的成束数据时,一个接一个地附加,有时,数组包含 180 个,有时包含 270 个。但是对于较小的束大小,我得到了期望的结果,并且“存储”数组的大小是也符合预期。

我对发生的事情一无所知,任何指示都会有很大帮助。

为了使事情更清晰,我在端口上获得的数据大部分是不可读的,通常唯一可读的部分是起始位“#S”和结束位“.”。所以我使用 BufferedInputStreamInputStream 的组合来读取传入数据并将其转换为十六进制格式,我很确定转换为十六进制即将到来差不多吧。

最佳答案

im using a combination of BufferedInputStream and InputStream to read the incoming data

在这里捕获救命稻草。如果您同时使用 InputStream 和 BufferedInputStream 方法从 Stream 读取数据,您将遇到困难:

InputStream is = ...
BufferedInputStream bis = new BufferedInputStream(is);

// This is OK
int b = bis.read();
...
// Reading the InputStream directly at this point is liable to
// give unpredictable results. It is likely that some bytes still
// remain in "bis"'s buffer, and a read on "is" will not return them.
int b2 = is.read();

关于Java socket监听加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167083/

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