Android網絡編程之Socket

        生活像一隻蝴蝶,沒有破繭的勇氣,哪來飛舞的美麗。生活像一隻蜂,沒有勤勞和努力,怎能嚐到花粉的甜蜜,越努力越幸運!

       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();											



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