<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    Java實現簡單的server/client回顯功能

    Socket是指在一個特定編程模型下,進程間通信鏈路的端點。因為這個特定編程模型的流行,Socket這個名字在其他領域得到了復用,包括Java叫技術。

      如果要建立連接,一臺機器必須運行一個進程來等待連接,而另一臺機器必須試圖到達第一臺機器。這個電話系統類似:一方必須發起呼叫,而另一方在此時必須等待電話呼叫。

      java網絡模型圖

      下面通過一個有“回顯”功能的服務器和客戶端來介紹應用java.net包編寫網絡應用程序。

      這個例子主要功能是服務器端的程序等待客戶的輸入,然后將讀取到的信息回顯給客戶端,同時在服務器端的控制臺輸出。而客戶端從控制臺接收信息后,向客戶端發送輸入,并接收服務器的回顯數據,然后顯示在控制臺。

      客戶端程序代碼如下:

    package com.javapp.ch11;
     import java.io.*;
     import java.net.*;
     /**
     * Description: 具有“回顯”功能的服務器端和客戶端程序
     */
     public class EchoClientDemo {
         // 服務器端的服務端口。
         public static final int SERVERPORT = 990;
         public static void main(String[] args) {
             try {
                 // 建立連接套接字。
                 Socket s = new Socket("localhost",SERVERPORT);
                 System.out.println("socket = " + s);
                 // 新建網絡連接的輸入流。
                 BufferedReader in = new BufferedReader(new InputStreamReader(s
                         .getInputStream()));
                 // 新建網絡連接的自動刷新的輸出流。
                 PrintWriter out = new PrintWriter(new BufferedWriter(
                         new OutputStreamWriter(s.getOutputStream())),true);
                 // 先使用System.in構造InputStreamReader,再構造BufferedReader。
                 BufferedReader stdin = new BufferedReader(
                         new InputStreamReader(System.in));
                 System.out.println("Enter a string, Enter BYE to exit! ");
                 while (true) {
                     // 讀取從控制臺輸入的字符串,并向網絡連接輸出,即向服務器端發送數據。
                     out.println(stdin.readLine());
                     // 從網絡連接讀取一行,即接收服務器端的數據。
                     String str = in.readLine();
             // 如果接收到的數據為空(如果直接按Enter,不是空數據),則退出循環,關閉連接。
                     if (str == null) {
                         break;
                     }
                     System.out.println(str);
                 }
                 s.close();
             } catch (IOException e) {
                 System.err.println("IOException" + e.getMessage());
             }
         }
     }
     上面客戶端程序中。首先用java.net包中的Socket類建立一個連接套接字,其后應用的Socket對象的getInputStream 方法從服務器接收數據,并且應用Socket對象的getOuputStream方法發送數據到服務器。創建完輸入輸出流,就可以像讀寫文件的方式來讀寫 數據。

      支持多客戶端的“回顯”服務器端程序代碼如下:

    package com.javapp.ch11;
     import java.io.*;
     import java.net.*;
     /**
     * Description:支持多客戶端的“回顯”服務器端程序
     */
     public class EchoServerThreadDemo {
         // 服務器端的服務端口。
         public static final int SERVERPORT = 990;
         public static void main(String[] args) {
             try {
                 // 已經連接上的客戶端的序號。
                 int number = 1;
                 // 建立服務器端傾聽套接字。
                 ServerSocket s = new ServerSocket(SERVERPORT);
                 System.out.println("Started: " + s);
                 while (true) {
                     // 等待并接收請求,建立連接套接字。
                     Socket incoming = s.accept();
                     System.out.println("Connection " + number + " accepted: ");
                     System.out.println(incoming);
                     // 啟動一個線程來進行服務器端和客戶端的數據傳輸。
                     // 主程序繼續監聽是否有請求到來。
                     Thread t = new EchoThread(incoming,number);
                     t.start();
                     number++;
                 }
             } catch (IOException e) {
                 System.err.println("IOException");
             }
         }
     }
     class EchoThread extends Thread {
         private Socket s;
         int n;
         public EchoThread(Socket incoming,int number) {
             s = incoming;
             n = number;
         }
         public void run() {
             try {
                 // 新建網絡連接的輸入流。
                 BufferedReader in = new BufferedReader(new InputStreamReader(s
                         .getInputStream()));
                 // 新建網絡連接的自動刷新的輸出流。
                 PrintWriter out = new PrintWriter(new BufferedWriter(
                         new OutputStreamWriter(s.getOutputStream())),true);
                 System.out.println("Hello! Enter BYE to exit.");
                 // 回顯客戶端的輸入。
                 while (true) {
                     // 從網絡連接讀取一行,即接收客戶端的數據。
                     String line = in.readLine();
             // 如果接收到的數據為空(如果直接按Enter,不是空數據),則退出循環,關閉連接。
                     if (line == null) {
                         break;
                     } else {
                         if (line.trim().equals("BYE")) {
                             System.out.println("The client " + n + " entered BYE!");
                             System.out.println("Connection " + n + " will be closed!");
                             break;
                         }
                         System.out.println("Echo " + n + ": " + line);
                         // 向網絡連接輸出一行,即向客戶端發送數據。
                         out.println("Echo " + n + ": " + line);
                     }
                 }
                 // 關閉套接字。
                 s.close();
             } catch (IOException e) {
                 System.err.println("IOException");
             }
         }
     }

      在服務器端程序中,首先用java.net包中的ServerSocket類創建一個服務器端偵聽套接字。其后應用ServerSocket類 的accept方法等待并接收用戶請求。當服務器每接收到一個連接請求后,就啟動一個線程來單獨處理服務器和客戶端的數據傳輸。服務器端數據的接收和發送 與上面介紹的客戶端數據的發送和介紹相同。

    posted on 2013-05-24 10:31 順其自然EVO 閱讀(204) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2013年5月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一卡2卡3卡4卡乱码 在线| 久久99国产亚洲高清观看首页 | 国产成人免费AV在线播放| 亚洲Av无码乱码在线观看性色| 亚洲aⅴ无码专区在线观看| 日本一区免费电影| 亚洲av无码专区在线观看下载| 日本一道在线日本一道高清不卡免费| 亚洲日韩中文字幕一区| 国产精品免费_区二区三区观看| 亚洲人av高清无码| 亚洲精品国产福利一二区| 男女拍拍拍免费视频网站| 亚洲Aⅴ无码专区在线观看q| 久久精品无码专区免费东京热 | 亚洲中文字幕AV每天更新| 好大好深好猛好爽视频免费| 国产成人亚洲毛片| 国产精品亚洲产品一区二区三区| 久久九九免费高清视频 | 99精品视频免费观看| 免费中文字幕一级毛片| 国产99久久久久久免费看| 亚洲精品美女久久久久99| 99精品热线在线观看免费视频 | 啊v在线免费观看| 成人片黄网站色大片免费观看cn| 亚洲午夜久久久精品影院| 成人免费a级毛片| 国产特黄一级一片免费| 91亚洲国产在人线播放午夜 | 亚洲日韩精品一区二区三区无码| 57pao一国产成永久免费| 蜜桃传媒一区二区亚洲AV | 在线观看人成视频免费| 中文字幕免费在线看电影大全 | 亚洲AV无码XXX麻豆艾秋| 亚洲人成无码网站| 最新猫咪www免费人成| 二个人看的www免费视频| 亚洲成a人片在线看|