首頁 web前端 js教程 使用Java實作簡單的server/client回顯功能的方法介紹_基礎知識

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

May 16, 2016 pm 05:34 PM
client server

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方法等待並接收使用者請求。當伺服器每接收到一個連線請求後,就會啟動一個執行緒來單獨處理伺服器和客戶端的資料傳輸。伺服器端資料的接收和發送與上面介紹的客戶端資料的發送和介紹相同。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer作業系統自帶的功能,旨在協助使用者保護重要資料和系統配置,並為中小型和企業級企業提供完整的備份和復原解決方案。只有執行Server2022及更高版本的使用者才能使用此功能。在本文中,我們將介紹如何安裝、解除安裝或重設WindowsServerBackup。如何重置Windows伺服器備份如果您的伺服器備份遇到問題,備份所需時間過長,或無法存取已儲存的文件,那麼您可以考慮重新設定WindowsServer備份設定。要重設Windows

Windows Server 2025預覽版迎來更新,微軟改善Insiders測試體驗 Windows Server 2025預覽版迎來更新,微軟改善Insiders測試體驗 Feb 19, 2024 pm 02:36 PM

在發布WindowsServer的build26040版本之際,微軟公佈了該產品的官方名稱:WindowsServer2025。一同推出的,還有Windows11WindowsInsiderCanaryChannel版本的build26040。有些朋友可能還記得,多年前有人成功將WindowsNT從工作站模式轉換為伺服器模式,顯示微軟作業系統各版本之間的共通性。儘管現在微軟的伺服器作業系統版本和Windows11之間有明顯區別,但關注細節的人可能會好奇:為什麼WindowsServer更新了品牌,

怎麼修改Nginx版本名稱偽裝任意web server 怎麼修改Nginx版本名稱偽裝任意web server May 14, 2023 pm 09:19 PM

如何修改nginx預設的名稱,可以稍微的偽裝一下,也可以裝x一般來說修改3個位置,一個是nginx.h、另一個是ngx_http_header_filter_module.c、還有一個ngx_http_special_response.c。提示:一般修改都是在nginx編譯之前修改,修改完了之後需要重新編譯程式碼如下:scr/core/nginx.conf#definenginx_version"1.4.7"#definenginx_ver"nginx/"n

微軟發布 Windows Server vNext 預覽版 25335 微軟發布 Windows Server vNext 預覽版 25335 Jan 10, 2024 am 08:49 AM

微軟在針對桌面端發布Win11預覽版更新的同時,今天也發布了WindowsServer長期服務頻道(LTSC)預覽版Build25335。微軟和以往相同,並未公佈完整的更新日誌,甚至於沒有提供相應的部落格文章。微軟調整了WindowsServer預覽版更新日誌,讓其和Canary頻道版本相同,如果沒有引進新的內容,則不放官方部落格文章。 IT之家註:Server的品牌尚未更新,預覽版仍為WindowsServer2022。此外,微軟將這些版本稱為WindowsServervNext,而不是已經上市的W

微軟發布 Windows Server 26080 預覽版更新:修復 Feedback Hub 故障 微軟發布 Windows Server 26080 預覽版更新:修復 Feedback Hub 故障 Mar 14, 2024 pm 07:11 PM

IT之家3月14日消息,微軟今天在桌面端發布Windows11Build26080預覽版更新之外,也更新推出了WindowsServerBuild26080預覽版更新。作為即將推出的WindowsServer長期服務通道(LTSC)的最新預覽版,WindowsServerBuild26080提供了資料中心版和標準版,使用者可以選擇桌面體驗和伺服器核心安裝選項。此版本還包括容器主機的年度通道,以及專門用於虛擬機器評估的Azure版本。 IT之家查詢X社群媒體,用戶回饋點擊右下角的Copilot按鈕,會

Nginx中Server和Location的匹配邏輯是什麼 Nginx中Server和Location的匹配邏輯是什麼 May 12, 2023 am 11:10 AM

server的匹配邏輯nginx在決定請求由哪個server塊執行時,主要關注的是server塊中的listen和server_name兩個字段listen命令listen字段定義server響應的ip和端口,如果沒有明確配置listen字段,默認監聽0.0.0.0:80(root)或0.0.0.0:8080(非root)listen可以被設定為:一個ip和連接埠的組合一個單獨的ip,預設監聽80埠一個單獨的連接埠,預設監聽所有的ip介面一個unixsocket路徑其中最後一項通常只用於在不同的

在Ubuntu Server 11.04上安裝GNOME 3的步驟 在Ubuntu Server 11.04上安裝GNOME 3的步驟 Dec 31, 2023 pm 03:59 PM

如果你認為安裝UbuntuServer11.04版完全沒必要裝圖形介面,更沒有必要裝目前還不是很完善的GNOME3。 。或應該用ARCH+GNOME3搭建。那麼請別繼續浪費時間看下去。前後花了2個晚上和一個白天,重裝了N次。終於有點成果了。不容易啊。廢話少說,正題:硬體:ThinkPadX61一隻,UbuntuServer11.04安裝U盤一隻上網:ADSL(無線,有線)操作:偽程序猿一枚1.插入U盤,重啟筆記本,狂按F12。 (針對X61)2.進入啟動選項介面,選擇USB啟動,然後選擇安裝Ubu

Linux防火牆之Firewalld Linux防火牆之Firewalld Feb 19, 2024 pm 06:24 PM

firewall防火墙firewalld服务有CLI和GUI两种工作模式。相较于iptables,firewall支持动态更新,并引入了区域(zone)的概念。简而言之,区域是指防火墙预先定义的一组防火墙策略,使得防火墙之间可以快速切换这些策略,从而显著提高了防火墙的切换效率和应用速度。区域默认策略规则trusted允许所有数据包home拒绝流入流量,但是与ssh,mdns,ipp-client,dhcpv6-client服务则允许通过internal等同于home区域work拒绝流入流量,但是

See all articles