Java網路程式設計--UDP傳送接收資料

曾木欠 發表於 2020-11-21

使用UDP協議傳送資料:

1.建立傳送端Socket物件
2.建立資料並打包
3.傳送資料
4.釋放資源

使用UDP協議接收資料:
1.建立接收端Socket物件
2.接收資料
3.解析資料
4.輸出資料
5.釋放資源

DatagramSocket:此類表示用來傳送和接收資料,基於UDP協議的:
1. DatagramSocket():建立Socket物件並隨機分配埠號
2. DatagramSocket(int port):建立Socket物件並指定埠號

傳送端程式碼:

package _net;
/**
 * 
 * @author fzl
 * @Dare 2020-11-21 21:52:46
 * @Description
 *
 */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class _UDP_send {
public static void main(String[] args) throws IOException {
	//建立一個隨機分配埠號的物件 
	DatagramSocket dSocket = new DatagramSocket();
	/*
	 * 建立資料並打包
	 * 
	 * DatagramPacket:此類表示資料包包
	 * 
	 * 需要知道:
	 * 資料:byte[]
	 * 裝置的地址
	 * 程式的地址:埠號
	 * DatagramPacket(byte[] buf,int length,InetAddress address , int port)
	 * 
	 */
	String s  ="hello";
	byte[] bs =s.getBytes();
	int length = bs.length;
	InetAddress adress = InetAddress.getByName(String 目標IP);
	int port = 8888;
	//打包:
	DatagramPacket dPacket = new DatagramPacket(bs, length, adress,port);
	
	
	//傳送資料
	dSocket.send(dPacket);
	
}
}

接收端程式碼:

package _net;

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

public class _UDP_receive {
public static void main(String[] args) throws IOException {
	//建立接收端Socket物件 埠號必須和傳送端的埠號一樣
	DatagramSocket dSocket = new DatagramSocket(8888);
	//建立一個包物件接收資料
	byte[] buf =  new byte[1024];
	DatagramPacket dPacket  = new DatagramPacket(buf, buf.length);
	//接收資料
	dSocket.receive(dPacket);
	//解析資料
	InetAddress address = dPacket.getAddress();
	byte[] data = dPacket.getData();//獲取接收到的資料
	int length = dPacket.getLength();//獲取具體收到資料的長度
	//輸出資源
	System.out.println("sender ->"+address.getHostAddress());
	System.out.println(new String(data,0,length));
	//釋放資源
	dSocket.close();
	
}
}