2010-03-22 103 views
2

我有這樣的代碼:爲什麼找不到getInputStream?

ServerSocket serverSideSocket = new ServerSocket(1234); 
     serverSideSocket.accept(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(serverSideSocket.getInputStream())); 

而編譯器寫信給我,它無法找到「的getInputStream」。我不懂爲什麼。在我的代碼的開始處,我輸入java.net.*

+4

http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#accept() – 2010-03-22 16:47:14

+0

那麼,閱讀文檔再次失去了風格? – Bombe 2010-03-22 16:53:24

回答

8

調用accept返回Socket的實例,該實例需要方法getInputStream

的代碼可能是這樣的:

ServerSocket serverSideSocket = new ServerSocket(1234); 
Socket socket = serverSideSocket.accept(); 
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

偉大的教程如何在Java與插座的工作:http://java.sun.com/docs/books/tutorial/networking/sockets/index.html

0

這是因爲概念上ServerSocket不提供可用於直接連接對象發送和接收數據。 A ServerSocket是一種工具,您可以與.accept()方法一起使用,讓它在選定端口上偵聽並在客戶端嘗試連接時生成新的真實連接。

這就是爲什麼你不能從ServerSocket得到InputStream。由於許多客戶端可以連接到同一臺服務器,因此每個客戶端都將生成一個新的Socket(即打開的TCP連接),該服務器從.accept()返回,通過它可以使用其InputStreamOutputStream進行發送和接收。