2014-03-01 56 views
1

我開始在java網絡和hava一些questions.Can任何人都清楚這些給我? 套接字和服務器套接字有什麼區別? ServerSocket是否與服務器有關?關於ServerSockets和套接字

+0

我們能否知道這些類的文檔的哪個部分及其構造函數對您而言不清楚? – Pshemo

+0

無論如何試着想一下這種情況:套接字用於與另一個套接字進行通信。問題是他們指定了另一個套接字的地址和端口號。你會如何解決「第一個插座」的問題?是否所有套接字都指定要連接哪個套接字,或者是否應該有另一種套接字不指定此套接字,並且將接受來自所有其他套接字的連接。還應該在哪裏使用這種套接字(哪些應該用於客戶端代碼,哪些用在服務器代碼上)? – Pshemo

回答

2

是的,我可以向您解釋:A ServerSocket是服務器端套接字。它需要您的防火牆中有一個開放的端口,並且需要LISTEN才能連接到您的計算機。 '正常'Socket只是詢問連接的服務器。這不需要防火牆中的開放端口。你在互聯網上做的一切都需要你的電腦在互聯網上詢問一個連接的服務器。但服務器必須偵聽連接。因此,與ServerSocket,你能接受這些要求,並創建一個連接:

ServerSocket server = new ServerSocket(<port>); 
Socket client = server.accept(); 

這是服務器端的代碼,它創建了一個ServerSocket來監聽連接請求並創建一個普通的Socket使用此連接。客戶端應用程序將連接這樣的:

Socket skt = new Socket(<ip>, <port>); 

這也將創造一個socket,可以使用該連接。但它需要一個serverSocket,它接受連接請求。

希望,幫你

Cydhra

P.S英語不是我的母語,所以我的失誤遺憾。

編輯:

u能請解釋一下我這是什麼server.accept()做

此方法將等待客戶端請求的連接。因此,如果您的應用程序在等待連接時應該做些什麼,您應該使用一個線程,因爲您的程序將停止,直到server.accept()獲取請求。

server.accept()等待客戶端請求與指定端口上的此服務器建立連接。當客戶端請求這樣的連接時,accept() - Method將返回一個代表客戶端的Socket實例。它包含輸入和輸出流,可用於發送和接收來自客戶端的數據。

Socket skt = new Socket(<port>, <ip>); 

這是客戶端的代碼,正如我在上面發佈的。它還包含輸入和輸出流。你在一個Socket的OutputStream中寫入的所有內容都將由另一個Socket的InputStream接收。套接字就像文件一樣,有兩個端點:一端寫入,另一端寫入。

+0

非常感謝,它確實幫助了我。你可以解釋一下server.accept()做什麼。客戶端請求時是否在服務器和客戶端之間創建套接字? –