偶用Java做的客户端,向服务端(别人用Delphi的)发送信息成功,服务器回复信息,偶是这样接收的:
  reader = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
  r = reader.readLine();
  如果服务端回复的信息最后面带有一个换行或回车符,那么我可以收到,如果不带,则我就收不到。因为服务端程序是已有的,要别人专门为我改程序是不现实的,那么我怎样才能接收到不带换行或回车符做为结束符的信息呢?

解决方案 »

  1.   

    觉得是你的readLine()的问题
    它的意思是读一行
    那么
    没有换行符和回车符就不能算作一行啊
    个人意见
      

  2.   

    问题是回复的信息里是没有回车或换行的,我判断有什么用。如果有回车或换行我就直接readLine()了。
      

  3.   

    可以设定一个buffer,然后一次读入buf长度的字符就可以了!当然这个buf的长度是需要和socket服务器端商定好的长度!基本就是说,他那边发送过来多少个字符,你接受多少个字符就可以!
      

  4.   

    BufferedReader in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
    char[] szRecvBuf = new char[1024];
    in.read(szRecvBuf, 0, szRecvBuf.length);
      

  5.   

    感谢 irvine007(┣━┫Rvine) ,我这个问题已经解决,但是现在新的问题又来了
    因为我每次收到的信息长度不会都是1024个字节,可能10个,也可能1000个,那我怎样把它整理为实际的长呢呢?我用for循环可以做到,但这种方法是不是太笨了呢?
      

  6.   

    BufferedReader in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
    byte[] szRecvBuf = new byte[1024];
    StringBuffer buff = new StringBuffer();do
    {
        int k = in.read(szRecvBuf, 0, szRecvBuf.length);
        buff.append(new String(szRecvBuf, 0, k));
    }while(k != -1)String 接受的字符串 = buff.toString;