为了账号安全,请及时绑定邮箱和手机立即绑定

UDP多线程

模仿TCP多线程监听写了一个UDP多线程,可是服务器的那个可以正常运行,但是客户端那个,第一次运行无法得到服务器传过来的语句,第二次运行能得到那语句,可是却自动terminated,不懂,求解,代码如下:

客户端代码:

55dab74b00013d4c05000292.jpg


线程代码:

55dab74b0001fe1c05000284.jpg


服务器代码:

55dab74b0001117f05000276.jpg


正在回答

1 回答

同样的问题,已解决。原因:socket.receive(packet)会锁死对象packet(你看一下receive方法就知道),主线程锁死packet对象后,在start()的子线程中不能调用  packet.属性,packet.方法()。

解决办法:

while(true){ 

    byte[] data=new byte[1024];//创建字节数组,指定接受的数据包的大小

    DatagramPacket packet=new DatagramPacket(data, data.length);

    socket.receive(packet);//此方法在接受到数据之前会一直阻塞

    UDPServerThread serverThread=new UDPServerThread(socket,apcket,data);

    serverThread.start();

}

这样在while循环到第二次时,new了一个新的packet对象,主线程锁住新对象,上一次的对象自动解锁,上一次循环时新建的子线程中的对packet进行调用的方法才可以开始执行。建议百度查一下同步synchronized

3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

UDP多线程

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号