麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

使用Java實現簡單的server/client回顯功能的方法介紹

2019-11-20 22:45:07
字體:
來源:轉載
供稿:網友

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方法等待并接收用戶請求。當服務器每接收到一個連接請求后,就啟動一個線程來單獨處理服務器和客戶端的數據傳輸。服務器端數據的接收和發送與上面介紹的客戶端數據的發送和介紹相同。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色免费入口 | 国产91九色 | 麻豆视频在线观看免费网站 | 欧美日韩在线视频一区二区 | 久久精品国产亚洲7777小说 | 亚洲自拍第一 | 日本最新免费二区三区 | 色综合狠狠 | 久久免费激情视频 | 国产成人在线网址 | 久久久一区二区精品 | 欧美色性 | 91精品国 | 久久久久久久国产视频 | 视频一区二区三区中文字幕 | 97黄色网| 一级美女大片 | 性生活视频软件 | 欧美一级淫片免费视频黄 | 久久9色| 久久亚洲美女视频 | 国产亚洲精品成人 | 中文字幕国产亚洲 | 免费观看一区二区三区视频 | 欧美亚洲免费 | 国产资源在线播放 | 国产在线观看91精品 | 欧美亚成人| 国产羞羞视频在线观看免费应用 | 一夜新娘第三季免费观看 | av黄色片网站| 亚洲免费毛片基地 | 国产精品久久久久久婷婷天堂 | 欧美成人精品欧美一级乱黄 | 91精品国产综合久久久动漫日韩 | 亚洲第一页夜 | a黄色网| 午夜精品视频免费观看 | 久久电影一区二区 | 日本欧美一区二区三区在线观看 | 日韩 综合 |