UDP多線程
模仿TCP多線程監聽寫了一個UDP多線程,可是服務器的那個可以正常運行,但是客戶端那個,第一次運行無法得到服務器傳過來的語句,第二次運行能得到那語句,可是卻自動terminated,不懂,求解,代碼如下:
客戶端代碼:
線程代碼:
服務器代碼:
模仿TCP多線程監聽寫了一個UDP多線程,可是服務器的那個可以正常運行,但是客戶端那個,第一次運行無法得到服務器傳過來的語句,第二次運行能得到那語句,可是卻自動terminated,不懂,求解,代碼如下:
客戶端代碼:
線程代碼:
服務器代碼:
2015-08-24
舉報
2015-11-29
同樣的問題,已解決。原因: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