UDP多線程
模仿TCP多線程監(jiān)聽寫了一個(gè)UDP多線程,可是服務(wù)器的那個(gè)可以正常運(yùn)行,但是客戶端那個(gè),第一次運(yùn)行無(wú)法得到服務(wù)器傳過來(lái)的語(yǔ)句,第二次運(yùn)行能得到那語(yǔ)句,可是卻自動(dòng)terminated,不懂,求解,代碼如下:
客戶端代碼:
線程代碼:
服務(wù)器代碼:
模仿TCP多線程監(jiān)聽寫了一個(gè)UDP多線程,可是服務(wù)器的那個(gè)可以正常運(yùn)行,但是客戶端那個(gè),第一次運(yùn)行無(wú)法得到服務(wù)器傳過來(lái)的語(yǔ)句,第二次運(yùn)行能得到那語(yǔ)句,可是卻自動(dòng)terminated,不懂,求解,代碼如下:
客戶端代碼:
線程代碼:
服務(wù)器代碼:
2015-08-24
舉報(bào)
2015-11-29
同樣的問題,已解決。原因:socket.receive(packet)會(huì)鎖死對(duì)象packet(你看一下receive方法就知道),主線程鎖死packet對(duì)象后,在start()的子線程中不能調(diào)用 ?packet.屬性,packet.方法()。
解決辦法:
while(true){?
????byte[] data=new byte[1024];//創(chuàng)建字節(jié)數(shù)組,指定接受的數(shù)據(jù)包的大小
????DatagramPacket packet=new DatagramPacket(data, data.length);
????socket.receive(packet);//此方法在接受到數(shù)據(jù)之前會(huì)一直阻塞
????UDPServerThread serverThread=new UDPServerThread(socket,apcket,data);
????serverThread.start();
}
這樣在while循環(huán)到第二次時(shí),new了一個(gè)新的packet對(duì)象,主線程鎖住新對(duì)象,上一次的對(duì)象自動(dòng)解鎖,上一次循環(huán)時(shí)新建的子線程中的對(duì)packet進(jìn)行調(diào)用的方法才可以開始執(zhí)行。建議百度查一下同步synchronized