1. 程式人生 > >Java網路程式設計UDP協議傳送接收資料

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

UDP協議傳送資料步驟

A:建立傳送端socket物件;

B:建立資料,並把資料打包;

C:呼叫socket物件的傳送方法傳送資料包;

D:釋放資源

package net;

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

public class SendDemo {
	public static void main(String[] args) throws IOException {
		//A
		DatagramSocket ds = new DatagramSocket();
		
		//B
		byte[] by = "Hello,UDP".getBytes();
		int length = by.length;
		InetAddress addr = InetAddress.getByName("192.168.1.22");
		int port = 10010;
		DatagramPacket dp = new DatagramPacket(by, length, addr, port);
		
		//C
		ds.send(dp);
		
		//D
		ds.close();
		
	}
}

UDP協議接收資料步驟

A:建立接收端socket物件;

B:建立一個數據包(接收容器);

C:呼叫socket物件的接收方法接收資料;

D:解析資料,顯示到控制檯;

E:釋放資源

package net;

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

public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		//A
		DatagramSocket ds = new DatagramSocket(10010);
		
		//B
		byte[] by = new byte[1024];
		int length = by.length;
		DatagramPacket dp = new DatagramPacket(by, length);
		
		//C
		ds.receive(dp);
		
		//D
		//獲取對方ip
		InetAddress addr = dp.getAddress();
		String ip = addr.getHostAddress();
		byte[] by2 = dp.getData();
		int len = by2.length;
		String s = new String(by2, 0, len);
		System.out.println(ip+"傳送的資料是:"+s);
		
		//E
		ds.close();
	}
}

先執行接收端程式碼,再執行傳送端程式碼。

多次從鍵盤接收發送資料版本

package net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendDemo {
	public static void main(String[] args) throws IOException {
		//A
		DatagramSocket ds = new DatagramSocket();
		//資料來自鍵盤錄入
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		while((line = br.readLine()) != null){
			//當輸入jieshu時,結束
			if("jieshu".equals(line)){
				break;
			}
			//B
			byte[] by = line.getBytes();
			int length = by.length;
			InetAddress addr = InetAddress.getByName("192.168.1.22");
			int port = 10010;
			DatagramPacket dp = new DatagramPacket(by, length, addr, port);
			 
			//C
			ds.send(dp);
		}
		//D
		ds.close();
		
	}
}
package net;

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

public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		//A
		DatagramSocket ds = new DatagramSocket(10010);
		//多次接受版本
		while(true){
			//B
			byte[] by = new byte[1024];
			int length = by.length;
			DatagramPacket dp = new DatagramPacket(by, length);
			
			//C
			ds.receive(dp);
			
			//D
			//獲取對方ip
			InetAddress addr = dp.getAddress();
			String ip = addr.getHostAddress();
			byte[] by2 = dp.getData();
			int len = by2.length;
			String s = new String(by2, 0, len);
			System.out.println(ip+"傳送的資料是:"+s);
		}
		
		//E
		//ds.close();
	}
}