編輯:Android技術基礎
本節給大家帶來Socket的最後一節:基於UDP協議的Socket通信,在第一節中我們已經詳細地 比較了兩者的區別,TCP和UDP最大的區別在於是否需要客戶端與服務端建立連接後才能進行 數據傳輸,如果你學了前兩節TCP的,傳輸前先開服務端,accept,等客戶端接入,然後獲得 客戶端socket然後進行IO操作,而UDP則不用,UDP以數據報作為數據的傳輸載體,在進行傳輸時 首先要把傳輸的數據定義成數據報(Datagram),在數據報中指明數據要到達的Socket(主機地址 和端口號),然後再將數據以數據報的形式發送出去,然後就沒有然後了,服務端收不收到我就 不知道了,除非服務端收到後又給我回一段確認的數據報~時間關系就不另外寫Android例子了 直接上Java代碼~
Step 1:創建DatagramSocket,指定端口號
Step 2:創建DatagramPacket
Step 3:接收客戶端發送的數據信息
Step 4:讀取數據
示例代碼:
public class UPDServer {
public static void main(String[] args) throws IOException {
/*
* 接收客戶端發送的數據
*/
// 1.創建服務器端DatagramSocket,指定端口
DatagramSocket socket = new DatagramSocket(12345);
// 2.創建數據報,用於接收客戶端發送的數據
byte[] data = new byte[1024];// 創建字節數組,指定接收的數據包的大小
DatagramPacket packet = new DatagramPacket(data, data.length);
// 3.接收客戶端發送的數據
System.out.println("****服務器端已經啟動,等待客戶端發送數據");
socket.receive(packet);// 此方法在接收到數據報之前會一直阻塞
// 4.讀取數據
String info = new String(data, 0, packet.getLength());
System.out.println("我是服務器,客戶端說:" + info);
/*
* 向客戶端響應數據
*/
// 1.定義客戶端的地址、端口號、數據
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "歡迎您!".getBytes();
// 2.創建數據報,包含響應的數據信息
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
// 3.響應客戶端
socket.send(packet2);
// 4.關閉資源
socket.close();
}
}
Step 1:定義發送信息
Step 2:創建DatagramPacket,包含將要發送的信息
Step 3:創建DatagramSocket
Step 4:發送數據
public class UDPClient {
public static void main(String[] args) throws IOException {
/*
* 向服務器端發送數據
*/
// 1.定義服務器的地址、端口號、數據
InetAddress address = InetAddress.getByName("localhost");
int port = 8800;
byte[] data = "用戶名:admin;密碼:123".getBytes();
// 2.創建數據報,包含發送的數據信息
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
// 3.創建DatagramSocket對象
DatagramSocket socket = new DatagramSocket();
// 4.向服務器端發送數據報
socket.send(packet);
/*
* 接收服務器端響應的數據
*/
// 1.創建數據報,用於接收服務器端響應的數據
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
// 2.接收服務器響應的數據
socket.receive(packet2);
// 3.讀取數據
String reply = new String(data2, 0, packet2.getLength());
System.out.println("我是客戶端,服務器說:" + reply);
// 4.關閉資源
socket.close();
}
}
本節內容比較簡單,無非就是將數據轉換為字節,然後放到DatagramPacket(數據報包中),發送的 時候帶上接受者的IP地址和端口號,而接收時,用一個字節數組來緩存!發送的時候需要創建一個 DatagramSocket(端到端通信的類)對象,然後調用send方法給接受者發送數據報包~ 本節代碼來源於慕客網上的一個JavaSocket教程~有興趣的可以看看: Java Socket應用---通信是這樣練成的
10.2 SmsManager(短信管理器)
本節引言:本節帶來的是Android中的SmsManager(短息管理器),見名知意,就是用來管理手機短信的,而該類的應用場景並不多,一般是我們發短
第59章、SharedPreferences存儲(從零開始學Android)
SharedPreferences是一種輕型的數據存儲方式,它的本質是基於XML文件存儲key-value鍵值對數據,通常用來存儲一些簡單的配置信息。其存儲位置在/dat
第32章、日期對話框DatePickerDialog(從零開始學Android)
在Android應用中,設置日期和時間是非常簡單的事,由日期和時間對話框控件搞定。 一、界面 1、打開“src/com.genwoxue.datetime
8.1.3 Android中的13種Drawable小結 Part 3
本節引言:本節我們來把剩下的四種Drawable也學完,他們分別是:LayerDrawable,TransitionDrawable,LevelLi