當(dāng)使用UDP協(xié)議,客戶端接收服務(wù)器響應(yīng)消息,沒有完全顯示出
public class UDPRunnable extends Thread{
DatagramPacket packet;;
//初始化DatagramPacket, DatagramSocket
public UDPRunnable(DatagramPacket packet){
this.packet=packet;
}
public void run() {
byte[] data=packet.getData();//!!!這里應(yīng)該使用packet的getData方法來創(chuàng)建data字節(jié),不然data字節(jié)中為空值
String info=new String(data,0,packet.getLength());//
System.out.println("我是服務(wù)器,客戶端說:"+info);
/*
* 服務(wù)器向客戶端發(fā)送響應(yīng)信息
*/
//需要知道客戶端的address,port,并且創(chuàng)建需要發(fā)送的消息
InetAddress address=packet.getAddress();
int port=packet.getPort();
byte[] data2="客戶端登陸成功,歡迎使用服務(wù)器".getBytes();
//創(chuàng)建DatagramPacket
DatagramPacket packet2=new DatagramPacket(data2,data2.length,address,port);
try {
DatagramSocket socket=new DatagramSocket();
socket.send(packet2);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class UDPClient {
public static void main(String[] args) throws IOException {
/*
* 向服務(wù)器端發(fā)送消息
*/
//1.需要獲取服務(wù)器端的地址,端口號
InetAddress address=InetAddress.getByName("localhost");
int port=6605;
byte[] message="用戶名:admin 密碼:123".getBytes();
//創(chuàng)建數(shù)據(jù)報
DatagramPacket packet=new DatagramPacket(message,message.length,address,port);
//創(chuàng)建DatagramSocket
DatagramSocket socket=new DatagramSocket();
socket.send(packet);
/*
* 接收服務(wù)器端發(fā)送的響應(yīng)消息
*/
//創(chuàng)建DatagramPacket
byte[] data=new byte[10*1024];
DatagramPacket packet2=new DatagramPacket(data,data.length);
socket.receive(packet2);
String reply=new String(data,0,packet.getLength());
System.out.println("我是客戶端,服務(wù)器說:"+reply);
}
}
客戶端輸出結(jié)果: ?客戶端啟動成功,歡迎使 ? ?
2016-12-31
繼承了Thread類,run()方法沒有運行??茨闶窍雽崿F(xiàn)runnable接口,但是卻繼承了Thread類。只有實現(xiàn)了Runnable接口,run()方法才能自動運行。還有,第二行有兩個分號。
服務(wù)器端程序(UDPRunnable)沒有入口(沒有main方法。)
DatagramSocket socket=new DatagramSocket();未指定端口號。
服務(wù)器端程序(UDPRunnable)步驟有誤??h先創(chuàng)建DatagramSocket實例,指定端口,在創(chuàng)建DatagramPacket數(shù)據(jù)包,在用socket實例接收數(shù)據(jù)。玩了用String的構(gòu)造方法讀取數(shù)據(jù)??蛻舳舜a沒有問題。
其他的沒有看出來。共同學(xué)習(xí),嘻嘻~