當使用UDP協議,客戶端接收服務器響應消息,沒有完全顯示出
public class UDPRunnable extends Thread{
DatagramPacket packet;;
//初始化DatagramPacket, DatagramSocket
public UDPRunnable(DatagramPacket packet){
this.packet=packet;
}
public void run() {
byte[] data=packet.getData();//!!!這里應該使用packet的getData方法來創建data字節,不然data字節中為空值
String info=new String(data,0,packet.getLength());//
System.out.println("我是服務器,客戶端說:"+info);
/*
* 服務器向客戶端發送響應信息
*/
//需要知道客戶端的address,port,并且創建需要發送的消息
InetAddress address=packet.getAddress();
int port=packet.getPort();
byte[] data2="客戶端登陸成功,歡迎使用服務器".getBytes();
//創建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 {
/*
* 向服務器端發送消息
*/
//1.需要獲取服務器端的地址,端口號
InetAddress address=InetAddress.getByName("localhost");
int port=6605;
byte[] message="用戶名:admin 密碼:123".getBytes();
//創建數據報
DatagramPacket packet=new DatagramPacket(message,message.length,address,port);
//創建DatagramSocket
DatagramSocket socket=new DatagramSocket();
socket.send(packet);
/*
* 接收服務器端發送的響應消息
*/
//創建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("我是客戶端,服務器說:"+reply);
}
}
客戶端輸出結果: ?客戶端啟動成功,歡迎使 ? ?
2016-12-31
繼承了Thread類,run()方法沒有運行??茨闶窍雽崿Frunnable接口,但是卻繼承了Thread類。只有實現了Runnable接口,run()方法才能自動運行。還有,第二行有兩個分號。
服務器端程序(UDPRunnable)沒有入口(沒有main方法。)
DatagramSocket socket=new DatagramSocket();未指定端口號。
服務器端程序(UDPRunnable)步驟有誤。縣先創建DatagramSocket實例,指定端口,在創建DatagramPacket數據包,在用socket實例接收數據。玩了用String的構造方法讀取數據??蛻舳舜a沒有問題。
其他的沒有看出來。共同學習,嘻嘻~