我有这段代码:
ServerSocket serverSideSocket = new ServerSocket(1234);
serverSideSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(serverSideSocket.getInputStream()));
编译器告诉我它无法找到“getInputStream”。我不懂为什么。在我的代码的开头,我导入了java.net.*
。
答案 0 :(得分: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
答案 1 :(得分:0)
这是因为从概念上讲,ServerSocket
不提供可用于发送和接收数据的直接连接对象。 ServerSocket
是一种工具,您可以使用.accept()
方法让它在所选端口上侦听并在客户端尝试连接时生成新的实际连接。
这就是为什么你无法从InputStream
获得ServerSocket
的原因。由于许多客户端可以连接到同一服务器,因此每个客户端都会使服务器套接字生成从Socket
通过.accept()
返回的新InputStream
(即已打开的 TCP连接)您可以使用OutputStream
和{{1}}发送和接收。