Java傳統Socket執行個體——TimeServer

來源:互聯網
上載者:User

該執行個體是基於傳統的ServerSocket和Socket來寫的,因此使用的是也是傳統的BIO(Blocking IO),並發的時候都是通過阻塞的方式來處理的,該執行個體是和MINA 2.0執行個體——TimeServer對應的,採用單線程通過迴圈來提供並發訪問,以更好的反應BIO和NIO的區別,代碼如下:

import java.io.DataInputStream;import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;import java.text.SimpleDateFormat;public class SocketTimeServer {public static void main(String args[]){try{ServerSocket serverSocket = new ServerSocket(60001);while(true){Socket ss = serverSocket.accept();String client = ss.getRemoteSocketAddress().toString();System.out.println("開啟一個用戶端串連" + client);PrintStream ss_out = new PrintStream(ss.getOutputStream());String temp = null;do{DataInputStream ss_in = new DataInputStream(ss.getInputStream());temp = ss_in.readLine();if(temp!=null && "quit".equals(temp.trim().toLowerCase())){ss.close();System.out.println("關閉一個用戶端串連"+client);break;}System.out.println("MESSAGE ”" + temp + "“  FROM: " + client);ss_out.println("Server Time: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));}while(temp!=null);}}catch(IOException e){e.printStackTrace();}}}

測試方法同MINA 2.0執行個體——TimeServer:

直接編譯執行該類,則啟動了伺服器,連接埠是60001。用戶端使用最簡單的,windows下使用cmd進入控制台(Windows 7預設沒有開啟該用戶端,需要通過“控制台->程式->程式和功能->開啟或關閉Windows功能”,選擇“Telnet伺服器”和“Telnet用戶端”來安裝),通過“telnet
127.0.0.1 60001”訪問伺服器,然後隨便輸入或者不輸入內容,點擊斷行符號,即可串連到伺服器擷取伺服器端的時間,而伺服器端也可以列印出監控到的用戶端的地址;這裡可以多開幾個cmd視窗,通過telnet進行串連,可以發現不同的視窗對於伺服器來說是不同的session。本例在本機和另外一台機器上各開啟了一個來進行測試,和MINA不同的是,本執行個體由於是傳統的Socket,因此當一個用戶端接入伺服器之後,就將伺服器阻塞了,這個時候,其他的用戶端即使連入了用戶端,也不能即時擷取服務,必須之前的用戶端的串連被關閉或者其操作完成自動結束,之後其他的用戶端才能擷取服務:

第一個用戶端連入後:


如果第一個用戶端一直不關閉串連,則第二個其他機器的用戶端連入後即使操作,也不能擷取結果,只有當第一個用戶端關閉了,才會有服務,此時第二個服務端的用戶端視窗顯示(和第一個用戶端一樣輸入了1,2,3,4,5並各有一個斷行符號):

伺服器端的控制欄列印顯示:

只有第一個用戶端通過輸入quit或者關閉cmd視窗關閉了串連,第二個才能擷取服務:

第一個用戶端輸入quit後的視窗顯示:


此時,的第二個用戶端的視窗列印如下:


伺服器端的視窗列印如下:


有此可見,當使用傳統socket編程時,只能通過多個線程來提供即時的多並發訪問了,基於NIO的非阻塞socket編程參見MINA
2.0執行個體——TimeServer。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.