Сокет: не удалось подключиться к серверу или конкретному порту
Я пытаюсь подключить сервер по порту и имени хоста.
Я нахожу одну программу, но когда я пытаюсь ее запустить, она показывает следующее исключение
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.
Не уверен, какой сервер и клиент вы имеете в виду.
Некоторые дополнительные ссылки:
- Все о сокетах (также включает в себя "Запись пары клиент / сервер")
- Включение желаемых протоколов xinetd
- Учебник по Java: клиент Echo в Java
Вы должны запустить свою серверную программу также на локальном хосте. Вы получаете это исключение, потому что порт 10008 не портится на вашей машине.
Какой-то вопрос:
Я пишу файл Java клиента, но нужно ли мне писать файл Java сервера.
Либо вы можете написать серверную программу, либо вы можете подключиться к удаленному серверу. В этом случае у вас должен быть как ip, так и работающий порт на удаленном сервере.
Можем ли мы отправить запрос, используя IP и порт.
Да. Вы оба хотели отправить сообщение.
Можем ли мы использовать имя хоста.
Если ваша машина может разрешить имя вашего хоста, вы можете сделать это. В противном случае вы можете использовать IP-адрес
Любое имя эхо-сервера? Мне нужно отправить сообщение на этот сервер, чтобы узнать ответ.
Я понятия не имею об этом, нужно искать в Интернете.
Я пробую оба сервера,java и client.java, тогда я получил результат? это решение для меня.
Да.