Почему он не может найти getInputStream? - PullRequest
2 голосов
/ 22 марта 2010

У меня есть этот код:

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

И компилятор пишет мне, что он не может найти "getInputStream". Я не понимаю почему. В начале моего кода я импортирую java.net.*.

Ответы [ 2 ]

8 голосов
/ 22 марта 2010

Вызов 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 голосов
/ 22 марта 2010

Это потому, что концептуально ServerSocket не предоставляет объект прямого подключения, который можно использовать для отправки и получения данных. ServerSocket - это инструмент, который можно использовать с методом .accept(), чтобы он мог прослушивать выбранный порт и генерировать новое реальное соединение, когда клиент пытается подключиться.

Вот почему вы не можете получить InputStream от ServerSocket. Поскольку многие клиенты могут подключаться к одному и тому же серверу, каждый клиент заставит сокет сервера генерировать новый Socket (то есть открытое TCP-соединение ), который возвращается из .accept(), через который вы можете отправлять и получить, используя InputStream и OutputStream.

...