linux Windows wordpress java 程序员 云计算 google shell 微软 开源 编程 centos Python php Android nginx mysql apache Ubuntu Firefox

socket通信基本概念

  Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求, Socket本質是編程接口(API),是對TCP/ip的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。

 其中,Socket和ServerSocket是基於TCP協議的,DatagramSocket是基於UDP協議的。TCP和UDP的概念在這裏不細說,具體的編程應用會在後續的博客中詳細講解。

 本篇博客列舉是一個最簡單的基於TCP的套接字程序;

 基於TCP的套接字,是客戶端進程和服務器端進程進行通信,客戶端向服務器端發送數據,服務器接收到數據後可以進行處理,可以再給客戶端返回處理後的數據,給大家舉個最簡單的例子,我們通過遊覽器訪問網頁,此時遊覽器就是一個客戶端,我們輸入網址,客戶端通過網址找到對應的遠程HTTP服務器,向其發送請求,HTTP服務器接到客戶端發來的請求後,給用戶返回數據,在這裏就是對應的網頁,這就完成了一次基於TCP的套接字通信;由此例子也可以很容易理解,一個服務器進程通常可以與多個客戶端進程相連接。

 下面通過一個簡單的例子來看一下如何實現套接字通信

 我們需要寫兩個類,服務器類EchoServer和客戶端類EchoClient

 服務器通過監聽端口,來接收客戶端發來的連接請求,所以先創建一個Socket對象,並指定監聽端口。

 Socket類提供了getInputStream()方法和getOutputStream()方法,分別返回輸入流和輸出流對象,程序從輸入流中讀取數據,就可以獲得從對方發來的數據;向輸出流中寫入數據,就可以向對方發送數據。這裏寫了兩個方法, 用過濾流對從Socket對象獲取的輸入輸出流進行包裝。

延伸阅读

评论