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

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

老師,我想請教一下為什么我用UDP寫出來的多線程會有BUG。內容為server端、serverthread端、client端

package?demostrator;

import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;

public?class?UDPserver?{
	public?static?void?main(String[]?args)?throws?IOException?{
		DatagramSocket?socket?=?new?DatagramSocket(8888);
		
		byte[]?data?=?new?byte[1024];
		DatagramPacket?packet?=?new?DatagramPacket(data,?data.length);
		
		System.out.println("***Server?will?be?start!***");
		
		while?(true)?{
			socket.receive(packet);
			
			ServerThread?thread?=?new?ServerThread(packet,socket);
			thread.start();
		}

	}
}



package?demostrator;
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
public?class?ServerThread?extends?Thread?{
DatagramPacket?packet?=?null;
DatagramSocket?socket?=?null;
ServerThread(DatagramPacket?packet,DatagramSocket?socket){
this.packet?=?packet;
this.socket?=?socket;
}
public?void?run(){
String?info?=?new?String(packet.getData());
//output?info?from?client
System.out.println("i?am?server,client?say:?"+info);
InetAddress?clientAddress?=?packet.getAddress();
int?port?=?packet.getPort();
byte[]?data1=?"Welcome?to?server!~".getBytes();
DatagramPacket?packet1?=?new?DatagramPacket(data1,?data1.length,?clientAddress,?port);
try?{
socket.send(packet1);
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}


package?demostrator;

import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;

public?class?UDPclient?{
	public?static?void?main(String[]?args)?throws?IOException?{
		//get?InetAddress?of?server
		InetAddress?add?=?InetAddress.getByName("localhost");
		int?port?=?8888;
		byte[]?info?=?"usearname:wujun;?password:416471".getBytes();
		
		DatagramPacket?packet?=?new?DatagramPacket(info,info.length,add,port);
		DatagramSocket?socket?=?new?DatagramSocket();
		
		socket.send(packet);
		
		//receive?server?infomation
		byte[]?serverMsg?=?new?byte[1024];
		DatagramPacket?packet1?=?new?DatagramPacket(serverMsg,?0,?serverMsg.length);
		socket.receive(packet1);
		
		String?strServer?=?new?String(serverMsg);
		System.out.println("Server?say:"+strServer);
		socket.close();
	}

}


正在回答

2 回答

把thread.start()改為thread.run()試試

0 回復 有任何疑惑可以回復我~
#1

豌豆娃

run方法就不是多線程了。就只是main線程的一個普通方法而已。如果下面還有一段程序,那么就必須等到run方法運行完,才能運行下面的程序。 start方法才是多線程的。和并行和main線程同時運行。如果下面還有一段程序,start線程會和下面程序并行運行的
2015-04-14 回復 有任何疑惑可以回復我~

能描述一下具體問題么

0 回復 有任何疑惑可以回復我~
#1

想你的俊 提問者

首先運行server端,后運行UDPclient端,這個時候server端并未接受到客戶端的數據,與此同時我運行另外一個客戶端,這個時候server端會出現響應,另外需要說明的是在完成以上動作之后server應該給到客戶端的回應也沒有出現。 能不能幫忙解析一下問題出現的原因和提供一下解決的辦法?謝謝了。
2015-03-19 回復 有任何疑惑可以回復我~
#2

沒有馬甲線的安琪拉 回復 想你的俊 提問者

斷點跟蹤一下,看看有沒有相關信息提示?
2015-03-24 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

老師,我想請教一下為什么我用UDP寫出來的多線程會有BUG。內容為server端、serverthread端、client端

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

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