首頁 > web前端 > js教程 > 主體

使用Java實作簡單的server/client回顯功能的方法介紹_基礎知識

WBOY
發布: 2016-05-16 17:34:47
原創
1598 人瀏覽過

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

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

java網路模型圖

下面透過一個有「回顯」功能的伺服器和用戶端來介紹應用java.net包編寫網路應用程式。

 

這個範例主要功能是伺服器端的程式等待客戶的輸入,然後將讀取到的資訊回顯給客戶端,同時在伺服器端的控制台輸出。而客戶端從控制台接收訊息後,向客戶端發送輸入,並接收伺服器的回顯數據,然後顯示在控制台。

客戶端程式碼如下:

複製程式碼 程式碼如下:

package com.javapp.ch11;
 import java.io.*;
 import java.net.*;
 /**
 * Description: 具有「回顯」功能的伺服器端與用戶端程式
 */
 public class EchoientDemo {
     // 伺服器端的服務連接埠。
     public static final int SERVERPORT = 990;
     public static void main(String[] args) {
   連接套接字。
             Socket s = new Socket("localhost",SERVERPORT);
            // 新建網路連線的輸入流。
             BufferedReader in = new BufferedReader(new InputStreamReader(s
                 // 新建網路連線的自動刷新的輸出流。
             PrintWriter out = new PrintWriter(new BufferedWriter(
       
             // 以System.in建構InputStreamReader,再建構BufferedReader。
             BufferedReader stdin = new BufferedReader(
                    System.out.println("Enter a string, Enter BYE to exit! ");
             while (true) {
                 // 以連結傳送資料至網路上的字串,即傳送資料至伺服器端。
                 out.println(stdin.readLine());
            
              會
                                     }
                 System.out.println(str);
    .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 Server {
     // 伺服器端的服務連接埠。
     public static final int SERVERPORT = 990;
     public static void main(String[] args) {
  連接上的客戶端的序號。
             int number = 1;
             //建立伺服器端聆聽套接字。
             ServerSocket s = new ServerSocket(SERVERPORT);
            while (true) {
                 // 以接收要求,並建立連結套接字。
                 Socket incoming = s.accept();
                       System.out.println(incoming);
              線程來進行伺服器端和客戶端的資料傳輸。
                 // 主程式繼續監聽是否有請求可使用。
                 Thread t = new EchoThread(incoming,number);
               number ;
             }
        ("IOException");
         }
     }
 }
 class EchoThread extends Thread {     public EchoThread(Socket incoming,int number ) {
         s = incoming;
         n = number;
    🎜>             // 新建網路連線的輸入流。
             BufferedReader in = new BufferedReader(new InputStreamReader(s
                 // 新建網路連線的自動刷新的輸出流。
             PrintWriter out = new PrintWriter(new BufferedWriter(
       
             System.out.println("Hello! Enter BYE to exit.");
             // 回顯客戶端的輸入。
             while (true) {
                 // 從網路連線中讀取一行,即接收客戶端的資料。
              會
                                     } else {
                               System.out.println( "The client " n " entered BYE!");
                                      break;
                   out.println ("Echo " n ": " line);
                     // 傳送至網路連線輸出一行,即傳送資料至客戶端。
                     out.println("Echo " n ": " line);
         }
             // 關閉套接字。
             s.close();
         } catch (IOException e) {         }
     }
 }


在伺服器端程式中,先用java.net套件中的ServerSocket類別建立一個伺服器端偵聽套接字。其後套用ServerSocket類別的accept方法等待並接收使用者請求。當伺服器每接收到一個連線請求後,就會啟動一個執行緒來單獨處理伺服器和客戶端的資料傳輸。伺服器端資料的接收和發送與上面介紹的客戶端資料的發送和介紹相同。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!