Socket 編程 -- MarsChen Android 教程學習筆記


什麼是Socket
通信鏈的句柄,用於描述IP 地址和接口。應用程序通常通過Socket 向網絡發出請求或者應答網絡請求。 
Socket 基本通信模型
Socket 編程 -- MarsChen Android 教程學習筆記 - Roller44 - 病友說
 
使用基於TCP 協議的Socket
Socket 編程 -- MarsChen Android 教程學習筆記 - Roller44 - 病友說
 
【服務器】
建立Socket ,建立一個新的線程,在線程中創建一個ServerSocket 對象,設置監聽指定端口號。

ServerSocket serverSocket = new ServerSocket(xxxx);

調用ServerSocket 的accept() 方法,接受客戶端發送的請求,建立一個InputStream 對象,調用socket 的getInputStream() 方法獲得信息流。而在線程中,accpet 方法是阻塞的方法,直到有聯繫之後才啓動線程。
ServerSocket socket = serverSocket.accept();
InputStream inputstream = socket.getInputStream();
同理,可以獲得outputStream。
OutputStream outputSream = socket.getOutputStream();
最後調用close() 方法關閉socket。
【客戶端】
建立Socket 對象,指定服務器端的IP 地址和端口號,調用getOutpuStream 方法產生outputStream 對象,從而讀取數據。
Socket socket = new Socket("IP...", xxxx);
InputStream inputStream = new FileInputStream("地址");
OutputStream outputStream = socket.getOutputStream();

使用基於UDP 協議的Socket
【服務器】
創建一個DatagramSocket 類型對象,指定端口號。創建一個空的DatagramPacket 對象,調用receive 方法,並傳入空的DatagramPacket 對象。其中,receive 方法和TCP 協議中的accept 方法一樣,都是阻塞線程的方法。
DatagramSocket socket = new DatagramPacket(xxx);
byte data[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
【客戶端】
創建一個DatagramSocket 對象,指定端口,再創建地址對象,調用getByName 方法指定地址。
DatagramSocket socket = new DatagramSocket();
InetAdress inetadress = InetAdress.getByName("地址");
String str ="xxx";
DatagramPacket packet = new DatagramPacket(data, data.length, inetadress, 端口號);
Socket.send(packet);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章