我目前正在黑莓上编写一个应用程序,以简单地将一些原始数据发送和接收到我网络上另一个基于 TCP 的设备。我在 Blackberry 模拟器中遇到了同样的问题,其中有一个 MDS 模拟器正在运行并使用物理电话与我公司的 MDS 服务器通话。请注意,直接使用 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 条件才能使它起作用。