package com.bacoo.www;
import java.io.IOException;
import java.net.*;
public class UDPServer implements Runnable{
/**
* @param args
*/
public UDPServer(){
new Thread(this).start();
try{
DatagramSocket dgs=new DatagramSocket(8765);
byte [] buf=new byte[1024];
DatagramPacket dgp=new DatagramPacket(buf,buf.length);
for(int i=0;i<3;i++){
dgs.receive(dgp);
System.out.println("The server has received the datagram!");
dgs.send(dgp);
}
}catch(IOException ioe){
ioe.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new UDPServer();
}
public void run() {
// TODO Auto-generated method stub
new UDPClient();
}
}
/*
說明:
這里要對UDP方式作一個簡要的說明,構成UDP通信機制的主要是兩個類,即DatagramSocket和DatagramPacket,
主要包括發送和接收兩個方面的內容,對于發送方來說,需要:
(1)建立一個DatagramSocket對象,注意建立的時候不需要指定端口,因為發送方關注的是發送成功,而不在乎是從本機的哪個端口發送出去的,
而發送的具體事宜則是由DatagramPacket來完成的,包括對目的地址的指定。
(2)建立一個DatagramPacket對象,注意要制定目的地址和對應的端口A。
(3)調用DatagramSocket對象的send函數發送,send函數的參數就是剛建立的DatagramPacket對象。
對于接收方來講,需要:
(1)建立一個DatagramSocket對象,注意要指定端口,因為作為接收方,不在乎接收的東西是從哪里來的,而只是在本機的一個指定端口進行
接收就ok了,但需要注意這里的端口要與發送方投遞的端口A一致。
(2)建立一個DatagramPacket對象,注意不必指定地址和端口,因為這是被動的接收,而在接收過程中,該DatagramPacket對象
扮演的角色僅僅是一個信息的承載者,也就是把從端口來的信息封存到它里面。
(3)調用DatagramSocket對象的receive函數接收,receive函數的參數就是剛建立的DatagramPacket對象。
最后,還有一點需要說明,就是在剛剛指出的接受模式來說,比如說本例中,雖然未給DatagramPacket對象指定地址和端口,但是
依然可以調用send函數進行發送,這是為什么呢?因為它先調用了receive函數,通過調用該函數,可以在接收過程中保存了信息的來源,
也就是地址和端口,因此下次再用send發送時,就仍然往這個地址和端口發送數據,因此可以發送成功。
*/