gpt4 book ai didi

networking - 使用 MDS 将 SocketConnection 与 Blackberry 一起使用的问题

转载 作者:行者123 更新时间:2023-12-04 00:53:47 25 4
gpt4 key购买 nike

我目前正在 Blackberry 上编写一个应用程序,以简单地向我网络上的另一个基于 TCP 的设备发送和接收一些原始数据。我在运行 MDS 模拟器并使用物理电话与我公司的 MDS 服务器通话的 Blackberry 模拟器中遇到了同样的问题。请注意,直接使用 wifi 而不是通过 MDS 时不会发生此问题。

问题是 InputStream 上的 available() 函数返回零,除非我先调用 read() 。如果我先调用 read (知道有一些数据可用......谢谢wireshark)数据会回来,随后对 available() 的调用指示我没有读取的剩余数据。问题是我并不总是能保证数据会在那里,所以我可以阻止。有没有人知道这一点,这是一个问题还是设计使然?

有没有人知道在调用它们之前测试 read() 方法是否会阻塞的方法?

这基本上是我在做什么:

SocketConnection s = (SocketConnection)Connector.open("socket://1.2.3.4:port;deviceside=false", Connector.READ_WRITE);

OutputStream o = ((StreamConnection)s).openOutputStream();
InputStream i = ((StreamConnection)s).openInputStream();

o.write("你好");
Thread.sleep(有时);
如果(i.available()> 0){
字节[]数据=新数据[10];
int bytesRead = i.read(data);
System.out.println("Read ["+ new String(data) + "] (bytes = "+ bytesRead + ")");
}

我必须注释掉 if 条件才能工作。

最佳答案

InputStream.available() 方法的一般约定是它“返回可以从此输入流读取(或跳过)的字节数,而不会被此输入流的方法的下一个调用者阻塞。”因此,在大多数实现中,不能保证它会返回正在读取的流的内容长度。因此,最好按以下方式阅读

byte[] readFromStream(InputStream is) throws IOException
{
byte[] data = new byte[4096];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);

int count = is.read(data, 0, data.length);
while (count != -1)
{
dos.write(data, 0, count);
count = is.read(data, 0, data.length);
}

data = baos.toByteArray();

return data;
}

您调用 readFromStream() 方法并返回 byte[]。

关于networking - 使用 MDS 将 SocketConnection 与 Blackberry 一起使用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313684/

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