亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號