如果Socket
代表客戶端和ServerSocket
代表服務器端,爲什麼Socket.read
從服務器端讀取數據?我很困惑,你能向我澄清一下嗎?Socket和ServerSocket有什麼區別?
回答
因爲它是閱讀的內容已經被服務器發送到你。
ServerSocket再次是一個具有服務器端點附加功能的Socket。服務器功能包括偵聽的端口並接受傳入的連接等...
爲什麼由於是讀取由發送數據socket.read讀取來自服務器端
數據通過網絡服務器,它不是直接讀取服務器文件系統或resouces(分貝,RAM或類似的東西)它讀取已經由將ServerSocket處理的數據。
想想的插座,網絡瀏覽器,將ServerSocket作爲遠程Web服務器。
當您請求圖像,頁面等時,web服務器(ServerSocket)將字節寫入客戶端,然後客戶端必須讀取它們(知道web服務器發送的是什麼?),並通過顯示他們到最終用戶。
同樣happend用的ServerSocket /插座,但在較低的水平。插座讀取將ServerSocket信息。
是否有意義?
Socket
是客戶端和ServerSocket
是服務器端。
java.net.ServerSocket中
此類實現服務器套接字。服務器套接字等待 請求通過網絡進入。它根據該請求執行一些基於 的操作,然後可能將結果返回給請求者。
java.net.Socket中
此類實現客戶端套接字(也可以就叫 「套接字」)。 A 套接字是兩臺機器之間通信的端點。
(我發佈這個答案,因爲我總覺得做出正確的邏輯是很重要的。)
我建議你看看下面的示例。
http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
誠然,進行TCP/IP通信的情況下,可以通過單獨的Socket
類用於通信的唯一目的提供了所有必要的信息。無論是在服務器端或客戶端。
正如你可以從上面的鏈接看到,服務器端使用下面的代碼,收購其擁有Socket
實例。也就是說,在另一個端口創建另一個插座。
然後,服務器使用該Socket
實例交談的客戶端。
爲了使圖片完整,下面的代碼片段顯示clien t的Socket
實例。
所以,如果Socket
可以做到這一切已經,爲什麼我們仍然需要ServerSocket
?
這是因爲通過TCP/IP協議通信的工作範式。
2周時談論的方案通過TCP/IP,一般人會被動聽/伺候<IP:port>
和其他人會積極連接到它。
所以你可以看到,在這個非常通訊的starting phase
,雙方有非常不同的行爲。因此,2個不同類用於反映這種差異。
Socket
class封裝了活動端的行爲。 (又名客戶端)ServerSocket
類封裝了被動方的行爲(又名服務器)
一旦ServerSocket
完成了它的聽力任務和detected
傳入連接,它會accept()
,並創建一個新的Socket
實例來促進溝通。
類似地,在java.nio
包中,您會發現ServerSocketChannel
和SocketChannel
類。而且是,他們的行爲是這樣的:
ServerSocketChannel -------------> SocketChannel
accept()
所以,在一定程度上,我同意@JohnK他在評論,it's more or less just a 6-letter difference
指出。
不要將信息作爲可以顯示文字的圖像提供。 – 2017-08-01 18:56:47
@KarlRichter這是爲了更好的高光照。 – smwikipedia 2017-08-01 22:35:33
首先,讓我們弄清楚什麼是Socket
是這樣的:在一個共同的情況下,Socket
是通過:
IP的串聯和端口,例如:127.0.0.1:8080
。
所以,你決定使用Socket
,使客戶端 - 服務器應用程序。沒有太複雜的東西。以下是有關使client
和server
之間的連接簡短說明:
- 首先,讓我們澄清這一事實,我們
client
有自己的Socket
,知道server
IP地址和端口。對於server
,僅提供ServerSocket
和端口。在這兩種情況下,端口是65535介於0和 所以,我們決定連接相同數量的我們
client
我們server
:client
創造了他與已知的IP和我們server
的端口Socket clientSocket
對象。server
得到了與他的ServerSocket.accept()
方法,生成新的Socket newClientSocket
對象(仍然在server
側(!))傳入的連接請求。進一步的數據交換通過
clientSocket
和newClientSocket
對象(不在clientSocket
和ServerSocket
之間)進行。
Here幾乎是完美的畫面,瞭解基本的連接過程(記住,是在這幅畫上Client
Socket
對象 - 相同的對象)。
當您製作了這個簡單的結構後,您需要在Client.clientSocket
和Server.newClientSocket
兩側打開兩個數據流,以便讀取和寫入信息。
ServerSocket
被創建爲bind
到端口和listen
從connect
來自客戶端。所以,一臺服務器只是在等待一個對話,並沒有啓動一個對話。
ClientSocket
創建爲connect
到listen
ing服務器。客戶端啓動連接。
示例:以呼入呼叫中心爲例。這些服務是服務器。他們不會發起呼叫,而是等待來自客戶的呼叫。一旦接通電話,他們可以進行雙向通話。
- 1. 直接關閉Input/OutputStream和關閉Socket有什麼區別?
- 2. Windows中的socket和HANDLE有什麼區別?
- 3. 有什麼區別`和$(Bash中有什麼區別?
- 4. ==和===有什麼區別?
- 5. ==和===有什麼區別?
- 6. 有什麼區別? :和||
- 7. ==和===有什麼區別?
- 8. '=='和'==='有什麼區別?
- 9. `&`和`ref`有什麼區別?
- 10. 有什麼區別:。!和:r!?
- 11. | 0和~~有什麼區別?
- 12. Appender和〜有什麼區別?
- 13. xtype和別名有什麼區別?
- 14. android下載方式,socket,downloadmanager,http有什麼區別?
- 15. 有什麼區別
- 16. 有什麼區別
- 17. 有什麼區別?
- 18. 有什麼區別?
- 19. 有什麼區別?
- 20. 有什麼區別
- 21. 有什麼區別?
- 22. 有什麼區別?
- 23. 有什麼區別
- 24. 有什麼區別
- 25. Microsoft.AspNet.WebApi.OData和Microsoft.Data.OData和Microsoft.AspNet.OData有什麼區別?
- 26. Viterbi CYK和Probabilistic CYK算法有什麼區別,有什麼區別嗎?
- 27. Java Socket技術和ServerSocket問題
- 28. Java ServerSocket/Socket聊天程序
- 29. 爲什麼ServerSocket使用不同的端口提供Socket?
- 30. 爲什麼ServerSocket在Socket中不調用NetworknOnMainThread?
雖然這在理論上可以回答的問題,[這將是優選的](// meta.stackoverflow.com/q/8259)以包括回答的主要部分在這裏,並提供鏈路參考。 – 2017-08-01 18:57:54