可能是socket stream自己缓冲管理的问题, 用flush

解决方案 »

  1.   

    DataOutputStream output = new DataOutputStream(socket.getOutputStream());
    output.write(sendByte);
    output.flush();
    //楼主试一试.
    帮你顶一下!
      

  2.   

    我的服务端是vc写的,客户端是JAVA写的。不会是这种原因造成的吧。
      

  3.   

    to : CharmingChen(charming) 
    remove socket.setSoTimeout(150);
    因为有时对方不存在的话就不返回数据回来,但对方存在肯定有正确数据传过来。
      

  4.   

    在下面两条语句后,
    DataOutputStream output = new DataOutputStream(socket.getOutputStream());
    output.write(sendByte);
    用了output.flush();
    依然没有解决,是不是要关闭output啊。
      

  5.   

    try {
        socket = new Socket(InetAddress.getByName(hostAddress), iCommPort);
        socket.setSoTimeout(150);
        DataOutputStream output = new DataOutputStream(socket.getOutputStream());
        output.write(sendByte);
        output.flush();
        DataInputStream input = new DataInputStream(socket.getInputStream());
        input.read(devReturnData);
    } catch (SocketException se) {
        System.out.println("Server not starting!");
        ifLink = true;
    } catch (IOException ioe) {
    } finally {
        try {
    if (socket != null) {
        socket.close();
    }
        } catch (IOException ioe) {}
    }
      

  6.   

    注意到,“我的服务端是vc写的,客户端是JAVA写的。不会是这种原因造成的吧。"问一下,Can your Client be connect to the server?
      

  7.   

    实施这段代码!try {
        socket = new Socket(InetAddress.getByName(hostAddress), iCommPort);
        
    System.out.println("Connection to Server accepted:"+socket);
    PrintWriter output =new PrintWriter( 
    new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);    socket.setSoTimeout(150);
        //DataOutputStream output = new DataOutputStream(socket.getOutputStream());
        output.write(sendByte);
        output.flush();
        //DataInputStream input = new DataInputStream(socket.getInputStream());
    BufferedReader input= new BufferedReader(new InputStreamReader(socket.getInputStream()));
    System.out.println(input.readLine());
        input.read(devReturnData);
    } catch (SocketException se) {
        System.out.println("Server not starting!");
        ifLink = true;
    } catch (IOException ioe) {
    } finally {
        try {
    if (socket != null) {
        socket.close();
    }
        } catch (IOException ioe) {}
    }
      

  8.   

    socket.setSoTimeout(150);
    PrintWriter output =new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
    output.write(sendByte);
    output.flush();
    BufferedReader input= new BufferedReader(new InputStreamReader(socket.getInputStream()));
    System.out.println(input.readLine());
    input.read(devReturnData);
    这里的sendByte、devReturnData都是字节数组吗?
    我需要都是字节数组。
      

  9.   

    to CharmingChen(charming):
    好象不行,换了两类,它是报超时的错。
    QQ:32372810
    MSN:[email protected]
    帮我解决,谢谢了。
      

  10.   

    通常都是需要使用缓冲来读数据。
    比如: byte[] buf = new buf[1024];
     int len = 0;  while (( len = input.read( buf ) ) != 0 ) {
       // 处理数据
       ... }
      

  11.   

    怎么SOCKET有什么自己丢失数据包呢。有时服务端没有返回数据,客户端就收到自己刚才发出的数据。
      

  12.   

    dinosaur_cl(慧剑)写得很好啊   
    搂主没看啊通常都是需要使用缓冲来读数据。
    比如: byte[] buf = new buf[1024];
     int len = 0;  while (( len = input.read( buf ) ) != 0 ) {
       // 处理数据
       ... }
      

  13.   

    while (( len = input.read( buf ) ) != 0 ) {
       // 处理数据
       ... }
    循环里的处理数据是不是说已经接受数据完了,关闭当前SOCKET。
    // 处理数据
    应该怎么写?
      

  14.   

    byte[] portReturnData = new byte[1024]
    int len = 0;
    DataInputStream input = new DataInputStream(socket.getInputStream());
    while (( len = input.read( portReturnData ) ) != 0 ) {
        break;
    }
    这样写程序接收数据,它是有时收不全;
    假如收到的正确字节数据是: a5 12 99 80 12 b1 ff
    收不全的时候的字节数据是: a5
    它只能收到字节流一个头,也就是一个帧头。
    频率是五次左右有一次。这个现象比较奇怪。真搞不懂。
      

  15.   

    这句有问题:
    DataInputStream input = new DataInputStream(socket.getInputStream());你需要确认你的数据类型,不是任何数据流都可以用
    DataInputStream. 如果你无法确定,可以直接用
    InputStream, 如想提高效率,可以用BufferedInputStream.
      

  16.   

    DataInputStream 改成BufferedInputStream也没有用,有时的收到数据只有头一个字节。
      

  17.   

    你设置的timeout时间是不是太短了??????
      

  18.   

    那要怎么设置timeout的时间啊,设置多大为好?