對客戶端和伺服器端通訊的理解

2021-08-27 17:01:06 字數 2367 閱讀 9140

對客戶端和伺服器端通訊的理解

客戶端:

能向伺服器傳送資訊,提出請求。

伺服器:

能接收客戶端發來的請求,並能傳送資料給客戶端以做出回應。

從這裡可以看出,我們的電腦可以充當雙重角色。

1、當我們用瀏覽器瀏覽網頁,要檢視某個檔案時,我們的電腦會發出請求給檔案伺服器,檔案伺服器收到請求並同意後,將檔案資料傳送到我們的電腦。此時,電腦充當客戶端的角色。

2、當電腦和印表機通訊後,印表機傳送列印請求,此時我們可以令電腦發出列印資訊(列印內容,單/雙頁列印等等)給印表機,印表機就可以開始列印了。此時電腦充當伺服器的角色。

二、疑問及其理解

客戶端與伺服器是怎樣進行通訊的?

以上面的電腦例子來說的話。

1、通訊首先需要進行通訊的實體

電腦&&檔案伺服器(可能是臺功能強大的電腦),電腦&&印表機。

2、然後是通訊的媒介

如上面例子中用到的電纜或光纜,當然也可能是介於某一頻譜範圍內的看不見的無線電波。

3、最關鍵的是通訊協議

電腦要和印表機交流,必須要規定通訊的規矩,即協議(電腦傳送一段資料過去,也許就是乙個符號'y',但印表機需要明白這是要列印的意思,所以他們事先要規定好什麼是什麼的意思,才不會出現對牛彈琴的現象)。當然,協議可多了,遠不止於這一點。資訊從電腦發出到檔案伺服器,就進過了許多的協議。本來是一段文字,經過某種協議被轉化成能在媒介中傳遞的電訊號或電磁波等訊號,這些訊號要達到檔案伺服器那一端,中途可能會碰到一系列的節點(能接受資訊並做出處理的系統,如路由器),節點會按照某種協議告訴這些訊號該怎樣走才能到達檔案伺服器,然後訊號開始沿著該節點告訴他的方向繼續傳遞(要知道網際網路的線路可是比蜘蛛網複雜的多,沒有中間一系列節點的幫助,要達到目的地可不容易啊!)。最好要到達目的地時,要按照協議將電訊號或電磁波訊號轉換為檔案伺服器能識別的資訊。意思大概就是這樣,如果想知道具體什麼協議的話,就需要檢視相關文獻了,重中之重莫過於tcp/ip協議了。

三、用socket套接字實現應用程式間的通訊

1、應用程式作為伺服器時,可以用以下**實現:

serversocket server=new serversocket(int port);

//server是建立的伺服器物件,port為該伺服器占用的埠號,只有當伺服器和客戶端的埠號相同時才能連線成功。

在伺服器端進行等待:

socket socket2=server.accept();//伺服器等待客戶機的訪問,程式執行到此處將被堵塞,即不向下繼續執行,直到有客戶機訪問該伺服器

2、應用程式作為客戶端時,可以用如下**來建立將與埠號一致的伺服器相連的客戶端:

socket client=new socket(string ip,int port);

//client是建立的客戶端物件,ip、port分別是該客戶端占用的ip號、埠號,此時伺服器的socket2被宣告成功,堵塞狀態不復存在,程式繼續向下執行

3、客戶端和伺服器連上後,需要進行他們之間的通訊,怎麼辦呢?可以分別獲取兩個物件的輸入、輸出流物件,以進行讀寫操作。

獲取客戶端的輸入、輸出流物件:

inputstream is_client=socket.getinputstream();

//is_client是客戶端socket的輸入流物件

outputstream os_client=socket.getoutputstream();

//os_client是客戶端socket的輸入流物件

同樣的,可以獲取伺服器端的輸入、輸出流物件:

inputstream is_server=socket2.getinputstream();

//is_server是客戶端socket的輸入流物件

outputstream os_server=socket2.getoutputstream();

//os_server是客戶端socket的輸入流物件

4、有了輸入、輸出流物件後,可以用讀寫操作進行伺服器和客戶端之間的通訊了。

a、客戶端寫入資訊,伺服器獲取資訊:

is_client.write("hello#".getbytes());//客戶端寫入"hello」,'#'是資訊結束的協議

stringbuffer sb=new stringbuffer();//sb是長度可動態變化的字串物件,便於新增字元和字串,用來儲存下面伺服器讀到的資訊

char c;//用於儲存讀到的單個位元組

c=os_server.read();//將讀到的乙個位元組儲存到變數c中

while(c!='#')

接下來,伺服器就可以對儲存在sb中的資訊進行相應的處理

b、同理,伺服器回應客戶端的過程,也就是伺服器寫入資訊(os_server.write()),客戶端讀取資訊(is_client.read())的,只是將上面的輸入、輸出流物件變換一下

C 客戶端和伺服器端

1 c s 客戶端應用程式 winform wpf 平級 資料是存放在其他的電腦上或伺服器上 資料的加工是在使用者的電腦上執行的,會對使用者的電腦配置有所要求 2 b s 網頁端應用程式 asp.net 統稱 asp.net webform asp.net mvc 平級 使用者傳送乙個請求到iis伺...

輕鬆理解 客戶端和伺服器端的區別

首先 服務端 服務端是為客戶端服務的,服務的內容諸如向客戶端提供資源,儲存客戶端資料。是實現遊戲特色化的重要途徑,也是最直接可以通過遊戲表現出來的技術,比如你要修改某個npc的引數,重載入後,在遊戲內立刻體現出來。其次自己理解 客戶端 我是客戶,我是有需求的,我提出需求 request 提出問題,誰...

輕鬆理解 客戶端和伺服器端的區別

首先 服務端 服務端是為客戶端服務的,服務的內容諸如向客戶端提供資源,儲存客戶端資料。是實現遊戲特色化的重要途徑,也是最直接可以通過遊戲表現出來的技術,比如你要修改某個npc的引數,重載入後,在遊戲內立刻體現出來。其次自己理解 客戶端 我是客戶,我是有需求的,我提出需求 request 提出問題,誰...