Гнездо: не може да се свърже със сървър или конкретен порт

Опитвам се да свържа сървър чрез порт и име на хост.
Намирам една програма, но когато се опитвам да стартирам, тя ще покаже следното изключение

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. Трябва да изпратя съобщение до сървъра и искам отговор от сървъра. Да предположим, че изпратя „Аз съм потребител на stackoverflow“, тогава сървърът трябва да даде някакъв отговор като връщане на същия низ или конвертиране в главни букви или нещо друго.

Някои въпроси:
1. Пиша клиентски Java файл, но дали трябва да напиша сървърен Java файл.
2. Можем ли да изпратим заявка, като използваме ip и порт.
3. Можем ли да използваме име на хост.
4. Някакво име на ехо сървър? трябва да изпратя съобщение до този сървър, искам да знам отговора.
5. Опитвам и сървър, и java, и client.java, след което получих резултат? това решение ли е за мен.


person Sandip Armal Patil    schedule 08.11.2012    source източник


Отговори (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.

Можете да настроите ехо сървър на вашата машина, така че първо да можете да се съсредоточите върху кодирането на вашия клиент. Има Стандартен Echo сървър, дефиниран на порт 7. Настройката зависи от средата на вашата операционна система - В 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.

Не сте сигурни кой сървър и клиент имате предвид.


Някои допълнителни справки:

person Andreas Fester    schedule 08.11.2012
comment
Искам да се свържа с отдалечен сървър. които ми изпращат отговор. Да предположим, че дам Servername= "ABC" and port = 1234. Възможно ли е това? - person Sandip Armal Patil; 08.11.2012
comment
Да, това е възможно - ако ABC може да бъде преобразуван във валиден IP и сървър слуша на порт 1234 на машината с този IP. Наистина ви препоръчвам да прочетете Всичко за гнездата, свързано в моя отговор по-горе. - person Andreas Fester; 08.11.2012

Трябва да стартирате вашата сървърна програма и на локален хост. Получавате това изключение, защото порт 10008 не се разваля на вашата машина.

Някакъв въпрос:

  1. Пиша клиентски Java файл, но дали трябва да напиша сървърен Java файл.

    или можете да напишете сървърна програма, или можете да се свържете с отдалечен сървър. В този случай трябва да имате както ip, така и работещ порт в отдалечения сървър.

  2. Можем ли да изпратим заявка чрез ip и порт.

    Да Изисквахте и двамата, за да изпратите съобщение.

  3. Можем ли да използваме име на хост.

    Ако машината ви може да разреши името на вашия хост, можете да го направите. В противен случай можете да използвате ip адрес

  4. Някакво име на ехо сървър? трябва да изпратя съобщение до този сървър, искам да знам отговор.

    Нямам представа за това, трябва да потърся в мрежата.

  5. Опитвам и сървър, и java, и client.java, след което получих резултат? това решение ли е за мен.

да

person someone    schedule 08.11.2012
comment
Искам да се свържа с отдалечен сървър. които ми изпращат отговор. Да предположим, че дам Servername= "ABC" and port = 1234. Възможно ли е това? - person Sandip Armal Patil; 08.11.2012
comment
Ако вашият хост файл може да преобразува вашия ABC в ip, можете да го използвате по този начин Пример: 127.0.0.1 ABC - person someone; 08.11.2012
comment
В противен случай ще получите изключение. - person someone; 08.11.2012