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

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

求指教:UDP線程接收多客戶端數(shù)據(jù)

我寫的跟“風(fēng)中過客”差不多,出了點(diǎn)小問題,弄不明白,請老師指教

	public?static?class?UDPThread?extends?Thread{
		DatagramSocket?socket=null;
		DatagramPacket?packet=null;
		public?UDPThread(DatagramSocket?socket,?DatagramPacket?packet)?{
			super();
			this.socket?=?socket;
			this.packet?=?packet;
		}
		
		public?void?run(){
			byte[]?data?=?packet.getData();
			String?info?=?new?String(data,0,packet.getLength());
			System.out.println("我是服務(wù)器,客戶端說:"+info);
			
			//響應(yīng)客戶端
			byte[]?data2?=?"歡迎您!".getBytes();
			InetAddress?address?=?packet.getAddress();
			int?port?=?packet.getPort();
			DatagramPacket?packet2?=?new?DatagramPacket(data2,?data2.length,?address,?port);
			try?{
				socket.send(packet2);
			}?catch?(IOException?e)?{
				//?TODO?Auto-generated?catch?block
				e.printStackTrace();
			}
		}
	}

上面沒什么問題,下面的main方法出問題了

	public?static?void?main(String[]?args)?throws?Exception?{
		DatagramSocket?socket?=?new?DatagramSocket(8800);
		byte[]?data?=?new?byte[1024];
		DatagramPacket?packet?=?new?DatagramPacket(data,?data.length);
		System.out.println("******服務(wù)器已經(jīng)啟動******");
		int?count?=?0;
		while(true){
			socket.receive(packet);
			UDPThread?udpThread?=?new?UDPThread(socket,?packet);
			udpThread.start();
			count++;
			System.out.println("客戶端數(shù)量為:"+count);
		}
	}

我把

byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);

放在循環(huán)外面

運(yùn)行時(shí)不報(bào)錯,但客戶端發(fā)送請求后,第一次得不到回應(yīng),發(fā)送第二次請求后,得到第一次的回應(yīng)

但服務(wù)端不顯示接收到的內(nèi)容

我學(xué)“風(fēng)中過客”把這兩句放循環(huán)里 ?就正常了

請問為什么?

正在回答

4 回答

DatagramPacket?p?=?new?DatagramPacket(buf,?buf.length);這個(gè)要放在while循環(huán)里面,因?yàn)槊恳淮蔚?/p>

receive()都要指定一個(gè)特有的DatagramPacket? p來接收每一個(gè)客戶端發(fā)過來的請求,如果你放在外面的話,就每一次都要等上一次的數(shù)據(jù)輸出后才能重新接收,這個(gè)就沒有為每一個(gè)客戶端各分配一個(gè)用來響應(yīng)的reply了,不知道能不能幫到你!!


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

xiele 提問者

明白了 原來是這樣 謝謝
2015-10-11 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕數(shù)據(jù)3802251

按照“每一次都要等上一次的數(shù)據(jù)輸出后才能重新接收”這個(gè)話來理解的話,那第二次服務(wù)器接收客戶端信息要在第一次信息輸出之后,但是結(jié)果顯然是沒有第一次的輸出,這不是矛盾嗎?我認(rèn)為這并不是正解。
2016-03-21 回復(fù) 有任何疑惑可以回復(fù)我~
#3

lucitas 回復(fù) 慕數(shù)據(jù)3802251

我覺得是定義在循環(huán)里的變量會在每次循環(huán)后,會被系統(tǒng)自動回收,因?yàn)槊恳淮蔚?receive()都要指定一個(gè)新的DatagramPacket,如果把datagrampacket和數(shù)組放在循環(huán)外面,一次循環(huán)后,packet和數(shù)組里面,保存的將會是上一次循環(huán)的數(shù)據(jù)。所以會出錯
2016-04-16 回復(fù) 有任何疑惑可以回復(fù)我~

感謝樓主和解答者的疑問幫助到了我

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

玩線程的高手們,指點(diǎn)一下嘛

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

同問啊


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

舉報(bào)

0/150
提交
取消

求指教:UDP線程接收多客戶端數(shù)據(jù)

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

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

幫助反饋 APP下載

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

公眾號

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