看代码是没什么问题。估计是源代码和类不一致吧,建议清除掉编译后的class文件,再编译下看看。

解决方案 »

  1.   

    是一个private的class? 你是在junit里面调线程吗?junit不支持多线程调试的
      

  2.   

    http://pan.baidu.com/s/1o6OGHcu
    代码我传到这了,求好心人帮忙看一下,问题出在NetClient类里,
    有说是改IP可以,不过我改了还是不行,
    调试的时候没看到进入run方法我想应该不是循环语句的问题吧,
    纠结了两天了,跪求路过大大帮忙看下,谢谢
      

  3.   

    junit没用上,代码放度盘了,能帮忙看下吗
      

  4.   

    第一直觉是null != ds返回false了,是不是这个ds为空才导致你后面的打印都没显示?
      

  5.   

    断点调试下啊,看看run方法调用了没
      

  6.   

    junit没用上,代码放度盘了,能帮忙看下吗在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer
      

  7.   

    junit没用上,代码放度盘了,能帮忙看下吗在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer
    能不能打印a packet received from server!这句?
    问题出在NetClient类里的说
      

  8.   

    调试没进入run方法没进入while,过了数组那就跳回调用方法那了
      

  9.   

    在run函数前加上@Override再试试吧,我所有的实现runnable接口的类都会提示加这个
      

  10.   

    我发现你实现的Runnable的类在方法里面,方法如果没有被执行的话,对象就不会创建
      

  11.   

    junit没用上,代码放度盘了,能帮忙看下吗在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer
    能不能打印a packet received from server!这句?
    问题出在NetClient类里的说其实问题并没有处在NetClient,而是在TankServer的UDPThread类收到客户端请求后的回复里面:
    dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort));  
     这一句set 返回的port有问题,你在用tcp跟TankServer建立联系的时候上传了port(2333)保存起来,想当然的以为客户端也是拿这个端口发UDP数据了,其实在NetClient中发送UDP的时候只能规定服务端的端口,也就是TankServer.UDP_PORT=6666,而没法规定客户端的发送数据包的端口,因此在服务器端得到的数据包的address端口是一个随机的端口。所以解决方案就是把这行:dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort));  改为dp.setSocketAddress(dp.getSocketAddress());即可,因为此时的socket address已经变成发送方的address了。
      

  12.   

    回家没网络没ip测试了TOT...
    十分抱歉。
    打算先放下搞些其他小东西
      

  13.   

    junit没用上,代码放度盘了,能帮忙看下吗在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer
    能不能打印a packet received from server!这句?
    问题出在NetClient类里的说其实问题并没有处在NetClient,而是在TankServer的UDPThread类收到客户端请求后的回复里面:
    dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort));  
     这一句set 返回的port有问题,你在用tcp跟TankServer建立联系的时候上传了port(2333)保存起来,想当然的以为客户端也是拿这个端口发UDP数据了,其实在NetClient中发送UDP的时候只能规定服务端的端口,也就是TankServer.UDP_PORT=6666,而没法规定客户端的发送数据包的端口,因此在服务器端得到的数据包的address端口是一个随机的端口。所以解决方案就是把这行:dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort));  改为dp.setSocketAddress(dp.getSocketAddress());即可,因为此时的socket address已经变成发送方的address了。
    仔细看了遍代码发现是有个Socket没传参数