Socket通信 客戶端編程

Socket適用場景:

  • 網絡遊戲,銀行交互,支付。

優點:

  • 傳輸數據爲字節級,傳輸數據可自定義,數據量小。相應的移動端開發,手機費用低;
  • 傳輸數據時間短,性能高;
  • 適合C/S之間信息實時交互;
  • 可以加密,數據安全性高

缺點:

  • 需要對傳輸的數據進行解析,轉化爲應用級的數據;
  • 對開發人員的開發水平要求高;
  • 相對於Http協議傳輸,增加了開發量

Socket 的基本操作:

  • 連接遠程機器;
  • 發送數據;
  • 接收數據;‰
  • 關閉連接;
  • 綁定端口;
  • 監聽到達數據 ;
  • 在綁定的端口上接受來自遠程機器的連接。

常用的構造客戶端 Socket 的方法有以下幾種:

  • Socket():創建一個新的未連接的 Socket;
  • Socket(Proxy proxy):使用指定的代理類型創建一個新的未連接的 Socket;
  • Socket(String dstName,int dstPort) :使用指定的目標服務器的 IP 地址和目標服務器 的端口號,創建一個新的 Socket;
  • Socket(String dstName,int dstPort,InetAddress localAddress,int localPort) :使用指定的目標主機、目標端口、本地地址和本地端口,創建一個新的 Socket;
  • Socket(InetAddress dstAddress,int dstPort) :使用指定的本地地址和本地端口,創建 一個新的 Socket;
  • Socket(InetAddress dstAddress,int dstPort,InetAddress localAddress,int localPort) :使 用指定的目標主機、目標端口、本地地址和本地端口,創建一個新的 Socket。

其中,proxy 爲代理服務器地址,dstAddress 爲目標服務器 IP 地址,dstPort 爲目標服 務器的端口號(因爲服務器的每種服務都會綁定在一個端口上面),dstName 爲目標服務器 的主機名。

Socket 類重要方法:

  • Public InputStream getInputStream() 讀出該 Socket 中的數據 ;
  • public OutputStream getOutputStream() 向該 Socket 中寫入數據;
  • public synchronized void close() 關閉該 Socket。

    TCP 客戶端工作的主要步驟如下:

  • 步驟 1 調用 Socket() 創建一個流套接字,並連接到服務器端。
  • 步驟 2 調用 Socket 類的getOutputStream() 和 getInputStream() 方法獲取輸出和輸入 流,開始網絡數據的發送和接收。
  • 步驟 3 關閉通信套接字。

一個簡單的socket 客戶端通信代碼:

try {
// 初始化 Socket,TCP_SERVER_PORT 爲指定的端口,int 類型
Socket socket = new Socket("localhost", 80);
// 獲取輸入流
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
// 生成輸出流
BufferedWriter out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
// 生成輸出內容
String outMsg = "TCP connecting to " + 80 +
            System.getProperty("line.separator");
// 寫入
out.write(outMsg);
// 刷新,發送
out.flush();
// 獲取輸入流
String inMsg = in.readLine() + System.getProperty("line.separator");
Log.i("TcpClient", "received: " + inMsg);
// 關閉連接
socket.close();
} catch (UnknownHostException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

在 Android 配置文件中需要添加下面的權限:
android.permission.INTERNET。

小結

以上就是簡單的Sockey通信客戶端編程。且只是入門。。。
socket 最核心的部分是 通信協議的設計 基於socket簡單通信協議實現

雜言:
兩個開源的框架不錯,一個是apache mina 還有個是netty。
Socket的3次握手鍊接與4次斷開握手

發佈了38 篇原創文章 · 獲贊 9 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章