生活像一隻蝴蝶,沒有破繭的勇氣,哪來飛舞的美麗。生活像一隻蜂,沒有勤勞和努力,怎能嚐到花粉的甜蜜,越努力越幸運!
Android開發肯定離不開網絡編程,首先說說網絡編程的三要素
一、IP地址
- 網絡中host的標識
- 不易記憶,可用主機名或域名
本地迴環地址,localhost:127.0.0.1
二、端口號
- 用於標識進程的邏輯地址
- 有效端口號:0-65535
- 系統保留端口號:0-1024
三、傳輸協議
通訊的規則
常見協議:HTTP,TCP,UDP,RTP,SMTP
這裏主要講tcp協議下的網絡編程,tcp協議是通過三次握手建立連接來通信,所以基本步驟如下
1.創建客戶端socket對象,建議對象創建時就明確目的地
2.如果連接建立成功,說明數據通道(socket流)已建立, 可以通過getInputStream或getOutputStream來獲取。
3.用輸出流將數據寫出
服務端代碼
ServerSocket serverSocket = new ServerSocket(port, 5);
while (true) {
mSocket = serverSocket.accept();
System.out.println("server started... http:/"+ mSocket.getLocalSocketAddress());
synchronized (ServerSocket.class) {
ServerThread serverThread = new ServerThread(mSocket);
serverThread.start();
}
}
try {
// 讀取客戶端數據 由Socket對象得到輸入流
InputStream inPut = socket.getInputStream();
if (inPut.available() > 0) {
// 讀取客戶端數據
BufferedReader br =new BufferedReader(new InputStreamReader(inPut));
String inStr = br.readLine();
receiveClientMsg(inStr);
// 模擬處理3秒
Thread.sleep(3000);
// 向客戶端回覆信息
if (inStr != null) {
mOutPrint = new PrintWriter(socket.getOutputStream());
}
// input.close();
}
} catch (Exception e) {
e.getStackTrace();
overThis();
}
/**
* 處理客戶端數據
* socket服務端得到返回數據併發送到主界面
*
* @param inStr
* @return 返回解析的數據
*/
public void receiveClientMsg(String inStr) {
Message msg = new Message();
msg.obj = inStr;
mHandler.sendMessage(msg);
}
客戶端代碼
//serverIp爲服務端IP,port 端口號
socket = new Socket(serverIp, port);
//獲取輸出流,向服務端發送消息
PrintWriter pw = new PrintWriter (socket.getOutputStream());
pw.println(msg);
// 讀取服務器端數據
InputStream in = socket.getInputStream();BufferedReader br = new BufferedReader (new InputStreamReader(in)); String inStr=br.readLine(); br.close();