2010-01-05 78 views

回答

0

因爲它是閱讀的內容已經被服務器發送到你

1

ServerSocket再次是一個具有服務器端點附加功能的Socket。服務器功能包括偵聽的端口並接受傳入的連接等...

9

爲什麼由於是讀取由發送數據socket.read讀取來自服務器端

數據通過網絡服務器,它不是直接讀取服務器文件系統或resouces(分貝,RAM或類似的東西)它讀取已經由將ServerSocket處理的數據。

想想的插座,網絡瀏覽器,將ServerSocket作爲遠程Web服務器。

當您請求圖像,頁面等時,web服務器(ServerSocket)將字節寫入客戶端,然後客戶端必須讀取它們(知道web服務器發送的是什麼?),並通過顯示他們到最終用戶。

同樣happend用的ServerSocket /插座,但在較低的水平。插座讀取將ServerSocket信息。

是否有意義?

0

Socket是客戶端和ServerSocket是服務器端。

7

java.net.ServerSocket中

此類實現服務器套接字。服務器套接字等待 請求通過網絡進入。它根據該請求執行一些基於 的操作,然後可能將結果返回給請求者。

java.net.Socket中

此類實現客戶端套接字(也可以就叫 「套接字」)。 A 套接字是兩臺機器之間通信的端點。

20

(我發佈這個答案,因爲我總覺得做出正確的邏輯是很重要的。)

我建議你看看下面的示例。

http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

誠然,進行TCP/IP通信的情況下,可以通過單獨的Socket類用於通信的唯一目的提供了所有必要的信息。無論是在服務器端或客戶端。

正如你可以從上面的鏈接看到,服務器端使用下面的代碼,收購其擁有Socket實例。也就是說,在另一個端口創建另一個插座。

enter image description here

然後,服務器使用該Socket實例交談的客戶端。

爲了使圖片完整,下面的代碼片段顯示clien t的Socket實例。

enter image description here

所以,如果Socket可以做到這一切已經,爲什麼我們仍然需要ServerSocket

這是因爲通過TCP/IP協議通信的工作範式。

2周時談論的方案通過TCP/IP,一般人會被動聽/伺候<IP:port>和其他人會積極連接到它。

所以你可以看到,在這個非常通訊的starting phase,雙方有非常不同的行爲。因此,2個不同類用於反映這種差異。

  • Socket class封裝了活動端的行爲。 (又名客戶端)
  • ServerSocket類封裝了被動方的行爲(又名服務器)

一旦ServerSocket完成了它的聽力任務和detected傳入連接,它會accept(),並創建一個新的Socket實例來促進溝通。

類似地,在java.nio包中,您會發現ServerSocketChannelSocketChannel類。而且是,他們的行爲是這樣的:

ServerSocketChannel -------------> SocketChannel 
         accept() 

所以,在一定程度上,我同意@JohnK他在評論,it's more or less just a 6-letter difference指出。

+0

不要將信息作爲可以顯示文字的圖像提供。 – 2017-08-01 18:56:47

+0

@KarlRichter這是爲了更好的高光照。 – smwikipedia 2017-08-01 22:35:33

3

首先,讓我們弄清楚什麼是Socket是這樣的:在一個共同的情況下,Socket是通過: IP的串聯和端口,例如:127.0.0.1:8080

所以,你決定使用Socket,使客戶端 - 服務器應用程序。沒有太複雜的東西。以下是有關使clientserver之間的連接簡短說明:

所有的
  1. 首先,讓我們澄清這一事實,我們client有自己的Socket,知道server IP地址和端口。對於server,僅提供ServerSocket和端口。在這兩種情況下,端口是65535介於0和
  2. 所以,我們決定連接相同數量的我們client我們server

    • client創造了他與已知的IP和我們server的端口Socket clientSocket對象。

    • server得到了與他的ServerSocket.accept()方法,生成新的Socket newClientSocket對象(仍然在server側(!))傳入的連接請求。

    • 進一步的數據交換通過clientSocketnewClientSocket對象(不在clientSocketServerSocket之間)進行。

Here幾乎是完美的畫面,瞭解基本的連接過程(記住,是在這幅畫上ClientSocket對象 - 相同的對象)。

當您製作了這個簡單的結構後,您需要在Client.clientSocketServer.newClientSocket兩側打開兩個數據流,以便讀取和寫入信息。

1

ServerSocket被創建爲bind到端口和listenconnect來自客戶端。所以,一臺服務器只是在等待一個對話,並沒有啓動一個對話。

ClientSocket創建爲connectlisten ing服務器。客戶端啓動連接。

示例:以呼入呼叫中心爲例。這些服務是服務器。他們不會發起呼叫,而是等待來自客戶的呼叫。一旦接通電話,他們可以進行雙向通話。