Проблемы при попытке реализовать пример Java Sockets - PullRequest
3 голосов
/ 22 августа 2011

Я пытаюсь реализовать этот пример здесь: Чтение и запись в сокет

Я скопировал и вставил код в NetBeans.Я изменил имя порта «taranis» на «localhost» и попытался запустить пример, но получил ошибку:

run: Не удалось получить ввод / вывод для соединения с: localhost.Результат Java: 1 BUILD SUCCESSFUL (общее время: 1 секунда)

Я также попытался заменить localhost моим фактическим именем хоста моего ноутбука, но выдает похожую ошибку.Можете ли вы помочь определить, что я делаю неправильно?

Редактировать: Что касается рекомендации Марка, когда я заменяю

System.err.println("Couldn't get I/O for " + "the connection to: localhost.");

на

e.printStackTrace();

, я получаю:

run:
java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)
        at EchoClient.main(EchoClient.java:12)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

Ответы [ 3 ]

3 голосов
/ 22 августа 2011

Служба эха не прослушивает.Почему бы не написать свой?Запустите приложение ниже и измените ваш клиент для подключения к тому же порту (8000).

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

    private static final int PORT = 8000;

    public static void main(String[] args) throws Exception {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(PORT);
        }
        catch (IOException e) {
            System.err.println("Could not listen on port: " + PORT);
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        }
        catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        System.out.println("Echo server started");

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println("echoing: " + inputLine);
            out.println(inputLine);
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

Кстати, следующий пример (сервер knock-knock) работает и дает хороший пример использования протокола'класс.

1 голос
/ 23 июля 2012

Для дальнейшего использования служба эха обычно отключена по умолчанию.Я использую Windows 7, чтобы включить его, я следовал инструкциям, найденным здесь:

http://www.windowsnetworking.com/articles_tutorials/windows-7-simple-tcpip-services-what-how.html

Пример работал хорошо для меня впоследствии.

Для XP:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sag_tcpip_pro_simptcpinstall.mspx?mfr=true

1 голос
/ 22 августа 2011

Я не думаю, что служба эха работает по умолчанию, когда я попытался быстро протестировать ее на моем клиенте Win XP, она не работала:

H:\>telnet localhost 7
Connecting To localhost...Could not open connection to the host, on port 7: 
Connect failed

H:\>

Итак, чтобы ваш код работал,Вы можете попробовать указать его на сервере, на котором запущена служба эха.

...