Сокет: не удалось подключиться к серверу или конкретному порту

Я пытаюсь подключить сервер по порту и имени хоста.
Я нахожу одну программу, но когда я пытаюсь ее запустить, она показывает следующее исключение

java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sample.Echoclient2.main(Echoclient2.java:31)
Couldn't get I/O for the connection to: 127.0.0.1
Java Result: 1    

Вот мой код, который я использую.

public class Echoclient2 {
public static void main(String[] args) throws IOException {

    String serverHostname = new String ("127.0.0.1");

    if (args.length > 0)
       serverHostname = args[0];
    System.out.println ("Attemping to connect to host " +
            serverHostname + " on port 10008.");



    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;

    try {
        echoSocket = new Socket(serverHostname, 10008);
        System.out.println("server name"+Inet4Address.getByName(serverHostname));
        out = new PrintWriter(echoSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(
                                    echoSocket.getInputStream()));
         System.out.println("Connection accepted " +
            echoSocket.getInetAddress() + ":" +
            echoSocket.getPort());
    } catch (UnknownHostException e) {
        e.printStackTrace();
        System.err.println("Don't know about host: " + serverHostname);
        System.exit(1);
    } catch (IOException e) {
        e.printStackTrace();
        System.err.println("Couldn't get I/O for "
                           + "the connection to: " + serverHostname);
        System.exit(1);
    }

BufferedReader stdIn = new BufferedReader(
                               new InputStreamReader(System.in));
String userInput;

    System.out.println ("Type Message (\"Bye.\" to quit)");
while ((userInput = stdIn.readLine()) != null) 
       {
    out.println(userInput);

        // end loop
        if (userInput.equals("Bye."))
            break;

    System.out.println("echo: " + in.readLine());
   }

out.close();
in.close();
stdIn.close();
echoSocket.close();
}

}

Что мне нужно:
1. Мне нужно отправить сообщение на сервер и получить ответ от сервера. Предположим, что я отправляю сообщение "Я являюсь пользователем stackru", тогда сервер должен дать любой ответ, например, вернуть ту же строку или преобразовать в верхний регистр или что-то еще

Некоторые вопросы:
1. Я пишу файл Java клиента, но нужно ли мне писать файл Java сервера.
2. Можем ли мы отправить запрос, используя IP и порт.
3. Можем ли мы использовать имя хоста.
4. Любое имя эхо-сервера? Мне нужно отправить сообщение на этот сервер, чтобы узнать ответ.
5. Я пробую оба сервера,java и client.java, тогда я получил результат? это решение для меня.

2 ответа

Решение

1. I write client Java File but whether i need to write server java file.

Да, вам нужно либо написать свой собственный сервер (если сервер должен удовлетворять некоторым уникальным требованиям), либо подключиться к существующему. Сообщение "Отказано в соединении" означает, что ни один сервер не работает на том порту, к которому вы пытаетесь подключиться.

2. Can we send request by using ip and port.

Да.

3. Can we use host name.

Да. Вам нужен либо IP или имя хоста, и порт.

4. Any echo server name? i need to send message to this server want to know response.

Вы можете настроить эхо-сервер на своем компьютере, чтобы сначала сосредоточиться на кодировании своего клиента. На порту 7 определен стандартный сервер Echo. Настройка зависит от среды вашей операционной системы. На Ubuntu Linux мне пришлось установить xinetd упаковать и включить эхо-сервер в /etc/xinetd.d/echo, Затем вы можете проверить, работает ли сервер, используя telnet программа:

andreas@ubuntu:~$ telnet localhost 7
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello
Hello

Использование telnet для подключения к любому порту также является распространенным методом проверки работоспособности и доступности сервера. С примером из вашего вопроса, вы можете проверить с telnet 127.0.0.1 10008 работает ли сервер на указанном вами порту - вы получите то же самое connetion refused как из вашей Java-программы, если сервер недоступен.

5. I try both server,java and client.java then i got result? is this solution for me.

Не уверен, какой сервер и клиент вы имеете в виду.


Некоторые дополнительные ссылки:

Вы должны запустить свою серверную программу также на локальном хосте. Вы получаете это исключение, потому что порт 10008 не портится на вашей машине.

Какой-то вопрос:

  1. Я пишу файл Java клиента, но нужно ли мне писать файл Java сервера.

    Либо вы можете написать серверную программу, либо вы можете подключиться к удаленному серверу. В этом случае у вас должен быть как ip, так и работающий порт на удаленном сервере.

  2. Можем ли мы отправить запрос, используя IP и порт.

    Да. Вы оба хотели отправить сообщение.

  3. Можем ли мы использовать имя хоста.

    Если ваша машина может разрешить имя вашего хоста, вы можете сделать это. В противном случае вы можете использовать IP-адрес

  4. Любое имя эхо-сервера? Мне нужно отправить сообщение на этот сервер, чтобы узнать ответ.

    Я понятия не имею об этом, нужно искать в Интернете.

  5. Я пробую оба сервера,java и client.java, тогда я получил результат? это решение для меня.

Да.

Другие вопросы по тегам