1. 程式人生 > >java之UDP使用示例程式碼

java之UDP使用示例程式碼

一,UDP傳輸DatagramSocketDatagramPacket

示例程式碼:

/**
 * UDP傳送
 * 步驟:
 * 1.建立UDP服務--DatagramSocket
 * 2.確定傳送的資料並封裝--DatagramPacket
 * 3.傳送資料--send
 * 4.關閉資源--close
 * @author 小蘇
 *
 */
public class Test_UDP {

	public static void main(String[] args) {
		
		DatagramSocket ds = null;
		try {
			// 1.建立UDP服務
			ds = new DatagramSocket();
			
			// 2.確定傳送的資料並封裝
			byte[] buff = "hello world".getBytes();
			DatagramPacket dp = new DatagramPacket(buff, buff.length,
					InetAddress.getByName("localhost"), 10000);
			
			//3.傳送資料
			ds.send(dp);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(ds != null){
				//4.關閉資源
				ds.close();
			}
		}
	}

}

/**
 * UDP接收
 * 1.建立UDP服務,注:接收端必須指定接收埠;
 * 2.定義儲存資料的資料包;
 * 3.接收資料包;
 * 4.解包
 * 5.關閉資源
 */
class UDPRec{
	
	public static void main(String[] args){
		
		DatagramSocket ds = null;
		try {
			//1.建立UDP服務
			ds = new DatagramSocket(10000);
			
			//2.定義儲存資料的資料包
			byte[] buf = new byte[1024];
			DatagramPacket p = new DatagramPacket(buf , buf.length);
			
			//3.接收資料包
			ds.receive(p);
			
			//4.解包
			byte[] data = p.getData();
			InetAddress address = p.getAddress();
			///newString(data,0,p.getLength())注意轉換長度
			System.out.println(new String(data,0,p.getLength())+"---"+address.getHostName());
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//4.關閉資源
			if(ds != null){
				ds.close();
			}
		}
	}
}


.UDP實現簡單聊天示例程式碼:

示例程式碼

public class Test_UDP_con {

	public static void main(String[] args) {
		UDPSend s = new UDPSend();
		UDPRec_con r = new UDPRec_con();
		Thread t1 = new Thread(s);
		Thread t2 = new Thread(r);
		
		t1.start();
		t2.start();
	}
}

/**
 * 傳送端
 * @author 小蘇
 *
 */
class UDPSend implements Runnable{

	@Override
	public void run() {
		
		DatagramSocket ds = null;
		try {
			ds = new DatagramSocket();
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			while(true){
				String line = reader.readLine();
				//設定結束標記
				if(line.equals("break")){
					break;
				}
				byte[] buff = line.getBytes();
				DatagramPacket dp = new DatagramPacket(buff, buff.length,
						InetAddress.getByName("localhost"), 10000);
				ds.send(dp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(ds != null){
				ds.close();
			}
		}
	}
}


/**
 * 接收端
 * @author 小蘇
 *
 */
class UDPRec_con implements Runnable{

	@Override
	public void run() {
		DatagramSocket ds = null;
		try {
			
			ds = new DatagramSocket(10000);
			byte[] buf = new byte[1024];
			
			//迴圈接收訊息
			while(true){
				DatagramPacket p = new DatagramPacket(buf , buf.length);
				ds.receive(p);
				byte[] data = p.getData();
				InetAddress address = p.getAddress();
				System.out.println(new String(data,0,p.getLength())+"---"+address.getHostName());
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}