2010-03-22 100 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进行发送和接收。