[code=Jav]/* 服务器端 */
private void processConnection(StreamConnection conn)
{
    String inputString = readInputString(conn); // 读取输入
    sendOutputData(inputString, conn);  // 在发送数据给客户端
    conn.close();
}/* 客户端 */
public void accessService(ServiceRecord sr)
{
    StreamConnection conn = (StreamConnection) Connector.open(url);
    DataOutputStream dos = conn.openDataOutputStream();  // 发送数据流
    dos.writeUTF("Hello");  // 写数据
    dos.close();  // 关闭
    /* 这里的问题 */
    DataInputStream dis = conn.openDataInputStream();  // 接收数据流,对应sendOutputData()
    // 想请教如果服务器已经接收到数据并发送,
    // 但在发送过程中因为某种原因数据流丢失,客户端conn.openDataInputStream()失败
    // 如何得到失败标志呢?
    String echo = dis.readUTF();  // 读数据
    dis.close();  // 关闭
}[/code]

解决方案 »

  1.   

    try catch ,就是在这种情况下使用的。
      

  2.   

        // 但在发送过程中因为某种原因数据流丢失,客户端conn.openDataInputStream()失败
        // 如何得到失败标志呢? 在不抛异常的情况下:
    1.判断conn.openDIS()返回值是否为null
    2.dis流读取是否处于阻塞状态
    3.dis已读取到流结尾返回为-1考虑下这三种应该够了
      

  3.   

    CSDN 中以前有人提过类似问题。
    http://topic.csdn.net/u/20091008/22/d8f3b210-0891-4cb2-9600-27f9affac0d6.htmlLZ可以参考一下。
    希望对你有帮助
      

  4.   

    三楼考虑比较全面
    第二条:.dis流读取是否处于阻塞状态 其实就是考虑超时,
    你问的如何设置,可以用下面这个方法
    socket.setSoTimeout(int timeout);
      

  5.   

    在不抛异常的情况下:
    1.判断conn.openDIS()返回值是否为null
    2.dis流读取是否处于阻塞状态
    3.dis已读取到流结尾返回为-1