第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

UDP多線程中true循環(huán)里面的問題

public?class?UDPServer?{
????public?static?void?main(String[]?args)?throws?IOException?{
	//?創(chuàng)建datagramsocket對(duì)象
	DatagramSocket?socket?=?new?DatagramSocket(8800);
	System.out.println("服務(wù)器端已經(jīng)啟動(dòng),等待客戶端發(fā)送數(shù)據(jù)");
	while?(true)?{
	????//?創(chuàng)建數(shù)據(jù)報(bào)
	????byte[]?data?=?new?byte[1024];
	????DatagramPacket?packet?=?new?DatagramPacket(data,?data.length);
	????//?3.接受客戶端的數(shù)據(jù)
	????socket.receive(packet);//?處于堵塞狀態(tài)
	????new?UDPThread(packet).start();?
	????}
	}
}

byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
為什么這一段代碼必須放在true循環(huán)里面??

開始我放在外面,但運(yùn)行后在thread線程中里面一直獲取不到packet對(duì)象,使用packet.getData()方法無效

System.out.println("run");
????//4.讀取客戶端數(shù)據(jù)
????String?info=new?String(packet.getData(),0,packet.getLength());
????System.out.println("我是服務(wù)器,客戶端說:"+info);

這是run()方法里面,打印run以后就走不動(dòng)了

正在回答

2 回答

原因:socket.receive(packet)會(huì)鎖死對(duì)象packet,主線程鎖死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í)行


1 回復(fù) 有任何疑惑可以回復(fù)我~

我也不理解,只要在while循環(huán)里面放進(jìn)?packet?=?new?DatagramPacket(data,?data.length);就沒錯(cuò),如果都放在循環(huán)外的話,運(yùn)行前兩個(gè)客戶端線程的話,run()輸出總是不完整的。如果樓主解決了這個(gè)問題,麻煩告訴一下~

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕粉4241372 提問者

碰到這種邏輯上的問題最惱人了,我還問了老師,他也不知道,還說socket方式實(shí)際運(yùn)用中很少用到,只能把這個(gè)問題跳過去了,但還是很不甘心
2017-03-21 回復(fù) 有任何疑惑可以回復(fù)我~
#2

小肚腩era 回復(fù) 慕粉4241372 提問者

這是我昨晚看到的一個(gè)慕友的回復(fù),樓主可以參考一下~
2017-03-21 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
Java Socket應(yīng)用---通信是這樣練成的
  • 參與學(xué)習(xí)       125006    人
  • 解答問題       627    個(gè)

分享的是 Java 中的網(wǎng)絡(luò)編程,使用Socket實(shí)現(xiàn)網(wǎng)絡(luò)聊天通信

進(jìn)入課程

UDP多線程中true循環(huán)里面的問題

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)