狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Android 開發即時聊天工具 YQ :(一) Socket 初步

admin
2013年2月25日 14:14 本文熱度 4522

這段時間在學習Android網絡編程,習慣一邊寫個簡單的項目一邊學習,所以就有了這個簡易的簡易的,,,項目,類似于手機QQ等等的即時聊天工具,當然功能及其簡單,跟那些沒法比,只是學習,實現簡單功能就OK,聽說QQ是有自己的協議的,貌似挺復雜,,,只為學習交流之用,而且本人也是Android小菜鳥一枚,錯誤不足在所難免,請大家多多指正,3Q~

先看看socket通信基礎:

所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。 

Socket和ServerSocket類庫位于java.net包中。ServerSocket用于服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。

服務器:

使用ServerSocket監聽指定的端口,等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接。 

客戶端:

使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket。

0~1023的端口號為系統所保留,例如http服務的端口號為80,telnet服務的端口號為21,ftp服務的端口號為23, 所以我們在選擇端口號時,最好選擇一個大于1023的數以防止發生沖突。

簡單的Client/Server示例:

服務器:

[java]
  1. public class Client {
  2.     public static void main(String[] args) throws Exception {  
  3.         //向本機的5469端口發出客戶請求   
  4.         Socket socket=new Socket(InetAddress.getLocalHost(),5469);  
  5.         //由Socket對象得到輸入流,并構造相應的BufferedReader對象   
  6.         BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  7.         //由Socket對象得到輸出流,并構造PrintWriter對象   
  8.         PrintWriter os=new PrintWriter(socket.getOutputStream());  
  9.         //由系統標準輸入設備構造BufferedReader對象   
  10.         BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));  
  11.         while(true){  
  12.             String str=sin.readLine();//從系統標準輸入讀入一字符串   
  13.             os.println(str);  
  14.             os.flush(); //刷新輸出流,使Server馬上收到該字符串   
  15.               
  16.             String s=is.readLine();  
  17.             System.out.println("Server : "+s);//在標準輸出上打印從Server讀入的字符串   
  18.             if(str.equals("end")){  
  19.                 break;  
  20.             }  
  21.         }  
  22.         is.close();//關閉Socket輸入流   
  23.         os.close();//關閉Socket輸出流   
  24.         socket.close();//關閉Socket   
  25.     }  
  26. }  

客戶端:

[java]
  1. public class MyServer {
  2.     public static void main(String[] args) throws Exception{  
  3.         ServerSocket server=new ServerSocket(5469);//創建一個ServerSocket在端口5469監聽客戶請求   
  4.         Socket client=server.accept();//使用accept()阻塞等待客戶請求   
  5.         BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));  
  6.         PrintWriter os=new PrintWriter(client.getOutputStream());  
  7.         BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));  
  8.         while(true){  
  9.             String str=is.readLine();  
  10.             System.out.println("Client : "+str);//在標準輸出上打印從Client讀入的字符串   
  11.               
  12.             os.println(sin.readLine());  
  13.             os.flush();//刷新輸出流,使Client馬上收到該字符串   
  14.             if(str.equals("end")){  
  15.                 break;  
  16.             }  
  17.         }  
  18.         is.close();  
  19.         os.close();  
  20.         client.close();  
  21.         server.close();  
  22.     }  
  23. }  

回話示例圖:


上邊的代碼只是實現一個客戶端訪問服務器,如果要多個客戶同時訪問一個服務器,那么服務端的代碼就要修改了:

[java]
  1. public class MyServer extends Thread{  
  2.     Socket client;  
  3.     public MyServer(Socket c){  
  4.         this.client=c;  
  5.     }  
  6.     public void run() {  
  7.         try{  
  8.             BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));  
  9.             PrintWriter os=new PrintWriter(client.getOutputStream());  
  10.             BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));  
  11.             while(true){  
  12.                 String s=is.readLine();  
  13.                 System.out.println("Client : "+s);//在標準輸出上打印從Client讀入的字符串   
  14.                   
  15.                 String str=sin.readLine();//從系統標準輸入讀入一字符串   
  16.                 os.println(str);  
  17.                 os.flush();//刷新輸出流,使Client馬上收到該字符串   
  18.                 if(str.equals("end")){  
  19.                     break;  
  20.                 }  
  21.             }  
  22.             is.close();  
  23.             os.close();  
  24.             client.close();  
  25.         }catch(Exception e){  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29.   
  30.     public static void main(String[] args) throws Exception{  
  31.         ServerSocket server=new ServerSocket(5469);//創建一個ServerSocket在端口5469監聽客戶請求   
  32.         while(true){  
  33.             MyServer s=new MyServer(server.accept());//使用accept()阻塞等待客戶請求   
  34.             s.start();  
  35.         }  
  36.     }  
  37. }  

該文章在 2013/2/25 14:15:02 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved