解决方案 »

  1.   

    输入输出使用的什么流包装的啊!一般使用DataInputStream和DataOutputStream流的readUTF()和writeUTF()方法读写字符串!
      

  2.   


    不是的,如果存到缓冲区,那么debug和正常运行整个流程执行完毕也不会有差别吧? 我遇到的是DEBUG和正常运行不一样。
      

  3.   


    可以帮忙看看吗? 我都试过,就是正常运行和debug出来的效果不一样。很奇怪,按正常逻辑没有区别。但是却有区别了。
      

  4.   


    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
      

  5.   


    每要传输一堆数据,立即调用一下流的 flush().   DEBUG时,会flush的。
      

  6.   


    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
    代码可以看看吗?
      

  7.   


    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
    代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
      

  8.   


    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
    代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
      

  9.   


    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
    代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
      

  10.   


    每要传输一堆数据,立即调用一下流的 flush().   DEBUG时,会flush的。 我没有用到缓冲流的。 不要的吧?
      

  11.   

    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
    代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
    #zxd6587#@#163.#com
    #去掉
      

  12.   

    这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
    代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
    #zxd6587#@#163.#com
    #去掉
    发了。先谢谢。
      

  13.   

    [email protected]
    发了。先谢谢,代码没写完。就是遇到问题就没写下去了
      

  14.   

    [email protected]  代码发给我 我帮你看看
      

  15.   


    问题出在这里!
    当你启动服务端的时候就一直在遍历存入socket的list集合!如果一个线程在遍历的时候
    你另一个线程修改集合内容就会抛出java.util.ConcurrentModificationException 异常!就是不允许加入!
    当上一个线程还在遍历的时候你这个线程往集合中加入内容 上图中的代码就会抛异常!Exception in thread "Thread-3" java.util.ConcurrentModificationException       ReceviedThread(也就是Thread-3)就停止运行了!所以你客户端发送的信息已经没有线程接收!所以在看不到任何输出,就以为没有收到!此时也就不存在遍历list情况!再连接其他客户端也就不会再抛异常!
    当你使用debug模式时!ReceviedThread会停在你打断点的地方没有一直遍历list集合!所以客户端连接进来时操作list集合(第二张图)不会抛异常!所以能够正常显示输出内容!
     
    楼主明白了吗?
      

  16.   

    谢谢,知道原因了。 通过synchronized锁list对象应该可以解决问题吧。?
      

  17.   

    谢谢,知道原因了。 通过synchronized锁list对象应该可以解决问题吧。?
    自己使用synchronized比较麻烦!因为有一个线程一直在遍历list容器,所以会一直持有这个对象锁!对list插入的那个线程一直无法获取到对象锁就一直等待!
    我记得Collections有个一静态方法Collections.synchronizedList(List<> list);可以返回一个同步控制的List!你可以试试!你那样读客户端发来的信息还有一个问题!当你获取到一个客户端的输入流使用in.read(buffer);读进buffer数组!read方法是个阻塞方法!也就是说程序会停在这里等着客户端发信息!其他客户端发的信息时无法显示的!因为程序等另一个客户端发信息!还没有遍历到发信息的这个客户端的socket!楼主明白我说 的意思吗??一般是一个客户端连进来服务器就开一个线程!而不是像这样一个线程服务所有客户端发来信息!
      

  18.   

    谢谢,知道原因了。 通过synchronized锁list对象应该可以解决问题吧。?
    自己使用synchronized比较麻烦!因为有一个线程一直在遍历list容器,所以会一直持有这个对象锁!对list插入的那个线程一直无法获取到对象锁就一直等待!
    我记得Collections有个一静态方法Collections.synchronizedList(List<> list);可以返回一个同步控制的List!你可以试试!你那样读客户端发来的信息还有一个问题!当你获取到一个客户端的输入流使用in.read(buffer);读进buffer数组!read方法是个阻塞方法!也就是说程序会停在这里等着客户端发信息!其他客户端发的信息时无法显示的!因为程序等另一个客户端发信息!还没有遍历到发信息的这个客户端的socket!楼主明白我说 的意思吗??一般是一个客户端连进来服务器就开一个线程!而不是像这样一个线程服务所有客户端发来信息!
    谢谢。之前的同步问题我通过锁List对象也能成功了,通过对象的wait()和notify()可以解决、。但你说的第二个问题,就是read()读数组,确实是个问题。我也在想办法解决。请问有什么好的方法吗?如果不改思路的情况下。  多谢你的帮助,学到了很多东西。
      

  19.   

    谢谢,知道原因了。 通过synchronized锁list对象应该可以解决问题吧。?
    自己使用synchronized比较麻烦!因为有一个线程一直在遍历list容器,所以会一直持有这个对象锁!对list插入的那个线程一直无法获取到对象锁就一直等待!
    我记得Collections有个一静态方法Collections.synchronizedList(List<> list);可以返回一个同步控制的List!你可以试试!你那样读客户端发来的信息还有一个问题!当你获取到一个客户端的输入流使用in.read(buffer);读进buffer数组!read方法是个阻塞方法!也就是说程序会停在这里等着客户端发信息!其他客户端发的信息时无法显示的!因为程序等另一个客户端发信息!还没有遍历到发信息的这个客户端的socket!楼主明白我说 的意思吗??一般是一个客户端连进来服务器就开一个线程!而不是像这样一个线程服务所有客户端发来信息!
    谢谢。之前的同步问题我通过锁List对象也能成功了,通过对象的wait()和notify()可以解决、。但你说的第二个问题,就是read()读数组,确实是个问题。我也在想办法解决。请问有什么好的方法吗?如果不改思路的情况下。  多谢你的帮助,学到了很多东西。不改变思路的话用这种阻塞式方法肯定不合适!可以尝试使用  nio  非阻塞!不过我也不是很熟!
    不过我建议还是一个客户端开一个子线程服务!
      

  20.   


    真实应用每连接进来一个客户端起一个子线程也不合理!太耗费资源!应该也是实用nio解决的!楼主好好研究一下nio吧!请猛点此链:http://shixm.iteye.com/blog/1792015
      

  21.   


    真实应用每连接进来一个客户端起一个子线程也不合理!太耗费资源!应该也是实用nio解决的!楼主好好研究一下nio吧!请猛点此链:http://shixm.iteye.com/blog/1792015太感谢你了。我研究后试试能不能不改思路的情况下做出来