junit没用上,代码放度盘了,能帮忙看下吗在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer
junit没用上,代码放度盘了,能帮忙看下吗在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer 能不能打印a packet received from server!这句? 问题出在NetClient类里的说
调试没进入run方法没进入while,过了数组那就跳回调用方法那了
在run函数前加上@Override再试试吧,我所有的实现runnable接口的类都会提示加这个
我发现你实现的Runnable的类在方法里面,方法如果没有被执行的话,对象就不会创建
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了。
回家没网络没ip测试了TOT... 十分抱歉。 打算先放下搞些其他小东西
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没传参数
代码我传到这了,求好心人帮忙看一下,问题出在NetClient类里,
有说是改IP可以,不过我改了还是不行,
调试的时候没看到进入run方法我想应该不是循环语句的问题吧,
纠结了两天了,跪求路过大大帮忙看下,谢谢
能不能打印a packet received from server!这句?
问题出在NetClient类里的说
能不能打印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了。
十分抱歉。
打算先放下搞些其他小东西
能不能打印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没传参数