调试就是在创建buf那调回去了,run方法都没进去过。
或者有好心人私聊传项目过去运行看一下吗
------解决思路----------------------
是一个private的class? 你是在junit里面调线程吗?junit不支持多线程调试的
------解决思路----------------------
第一直觉是null != ds返回false了,是不是这个ds为空才导致你后面的打印都没显示?
------解决思路----------------------
断点调试下啊,看看run方法调用了没
------解决思路----------------------
我发现你实现的Runnable的类在方法里面,方法如果没有被执行的话,对象就不会创建
------解决思路----------------------
其实问题并没有处在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了。