Проблема с сетью Java: java.net.ConnectException: соединение отказано: соединение - PullRequest
3 голосов
/ 16 февраля 2011

Я не могу создать какую-либо сеть на Java, когда я запускаю простую сетевую программу, я не могу получить соединение, даже при использовании локального хоста. Ошибка:

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at EchoClient.main(EchoClient.java:8)

Это программа:

import java.io.*;
import java.net.*;
import java.util.*;

public class EchoClient{
    public static void main(String[] args) {
        try{
            Socket client = new Socket(InetAddress.getLocalHost(), 1234);
            InputStream clientIn = client.getInputStream();
            OutputStream clientOut = client.getOutputStream();
            PrintWriter pw = new PrintWriter(clientOut);
            BufferedReader br = new BufferedReader(new InputStreamReader(clientIn));
            Scanner stdIn = new Scanner(System.in);
            System.out.println("Input Message:");
            pw.println(stdIn.nextLine());
            System.out.println("Recieved Message:");
            System.out.println(br.readLine());
            pw.close();
            br.close();
            client.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

Я использую Windows 7, у меня отключен брандмауэр Windows, и у меня нет антивируса.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Как я уже писал в своем комментарии, проверьте, что сервер (что-то вроде EchoServer?) Запущен и работает.


Но при успешном подключении возникают другие проблемы. pw.println(stdIn.nextLine()); может не отправлять контент на сервер, вам нужно сделать pw.flush();, чтобы действительно отправить контент, или вы можете создать PrintWriter с автоматическим сбросом:

 pw = new PrintWriter(clientOut, true);

Если вам нужен EchoServer, я только что написал тот, который работает с вашим клиентом, если вы добавите сброс , который я описал выше:

public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(1234);

        while (true) {
            // accept the connection 
            Socket s = ss.accept();

            try {
                Scanner in = new Scanner(s.getInputStream());
                PrintWriter out = new PrintWriter(s.getOutputStream(), true);

                // read a line from the client and echo it back
                String line;
                while ((line = in.nextLine()) != null) 
                    out.println(line);

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                s.close();
            }
        }
    }
}

Вы можете попробовать это с telnet localhost 1234.

1 голос
/ 29 декабря 2011

Моим решением в Windows 7 было включить «Простые службы TCP / IP».Это описано здесь: http://www.windowsnetworking.com/articles_tutorials/windows-7-simple-tcpip-services-what-how.html

1 голос
/ 16 февраля 2011

Дважды проверьте, что ваш локальный EchoServer работает и работает на порту 1234. Если на этом порту не работает сервер, вы не сможете подключиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...