你的代码不对,
while ((s = in.readLine()) != null) {
                    strin += s + "\n";
                    //System.out.print("!" + s + "\n");// for debug
                };
他会连续读取,当读了第一个,而第二个还没有发的时候,要知道,这个循环是很快的,他就读出NULL了。循环就结束了你要这么写,无条件循环,当接受到特定字符的时候退出循环。
while (true) {
s = in.readLine();
if(s=="tuichu")break;
                    strin += s + "\n";
                    //System.out.print("!" + s + "\n");// for debug
                }

解决方案 »

  1.   

    TO yabbijan(风哥) :  在循环的前面有一个停顿
               System.out.print("Enter to continue!_");
                    String str = inp.readLine();//就是暂停一下要敲一个回车才能继续发送第二个包,然后用那个while接收数据我就是不知道是 
    1、第二个包发出去以后根本没有接收到数据(第二个数据包也没有问题,把它放到第一个发也能受到正确结果)
    还是
    2、 收到数据了没有读出来 我怀疑是不是bufferedreader中的buffer的指针已经到最后了所以读出的是null!
    怎么让BufferedReader中的buffer恢复成原来的样子?
      

  2.   

    怎样才能清空readbuffer里面的缓存?
      

  3.   

    没细看你的代码
    有的时候 不同的语言的Socket是稍微有些不同的
    你把String str = inp.readLine(); 里面的str仔细看看,会不会是在字符串结尾处有些换行符阿或者其他一些看不见的字符!
      

  4.   


    while ((s = in.readLine()) != null) {
                        strin += s + "\n";
                        //System.out.print("!" + s + "\n");// for debug
                    }改为
    while(true)
    {
        try{
             s=in.readLIne();
           }catch(IOExcepiton e)    if(s!=)
        {
          
        }
    }
      

  5.   


    while ((s = in.readLine()) != null) {
                        strin += s + "\n";
                        //System.out.print("!" + s + "\n");// for debug
                    }改为
    while(true)
    {
        try{
             s=in.readLIne();    //此处如果接收不到数据,会一直监听,不会继续往下执行!若连接断 则会捕获到异常.
           }catch(IOExcepiton e)
           {
             System.out.println("已和服务断开连接!")
           }
        if(s!=null)
        {
          strin += s + "\n"; 
        }
    }
      

  6.   

    我调试的时候运行到in.readline的时候进去就出不来了,应该是一直在监听,
    断开连接他会抛出错误的在    for (int loop = 0; loop < 8; loop++) {
    这个循环里  当loop=0的时候能执行,但是当loop=1再执行回来到readline的时候就出不来了。
      

  7.   

    ...
    你不是有两个循环么??? 两个循环肯定不行的
    for(...)
    {
        // 发了一句话
        while(s=in.readline()!=null)
            // 显示一句话;
    }
    可改为:
    for(...)
    {
        // 发了一句话
    }
    while(s=in.readline()!=null)
        // 显示一句话;或者:
    for(...)
    {
        // 发了一句话
        s=in.readline();
        // 显示一句话;
    }
    ...
      

  8.   

    如果是socket的话,我建议你用多线程,一个线成不停的监听一个端口,如果有连接,就生产一个新线程,由新的线程来读取数据。这样就可以保证读到每次发送过来的数据了。
      

  9.   

    to  hifan(Hifan On Line):先谢谢了for(...)
    {
        // 发了一句话
    }
    while(s=in.readline()!=null)
        // 显示一句话;////这个,我是要根据第一次返回的数据来决定第二次要发什么的,这个好像是一次全部发完再收,好像不行for(...)
    {
        // 发了一句话
        s=in.readline();
        // 显示一句话;
    }
    ...
    //// 这个,每次返回的数据不是一行而是很多行,而且中间可能有空行,所以很麻烦。
      

  10.   

    To  hxshandle(有妖怪啊) :谢谢先现在只考虑客户端,连接应该只有一个,我发过去,他发回来,循环的回去先试试多线程 谢谢