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次斷開握手