URLConnection class java.net.ConnectException: Соединение отказано: соединение - PullRequest
1 голос
/ 29 декабря 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 sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
    at MainJApplet.init(MainJApplet.java:58)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
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 sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
    at RequestServer.sendRequest(RequestServer.java:25)
    at createGUI.createEditingBar(createGUI.java:1313)
    at GUI.createAndShowGUI(GUI.java:813)
    at MainJApplet.init(MainJApplet.java:137)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
java.net.ConnectException: Connection refused: connect
java.lang.NullPointerException
    at createGUI.createEditingBar(createGUI.java:1315)
    at GUI.createAndShowGUI(GUI.java:813)
    at MainJApplet.init(MainJApplet.java:137)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.NullPointerException

Ниже описана проблема, с которой можно столкнуться:

URL url = new URL(ipAddr);
URLConnection connection = url.openConnection();

connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); // exception happens

Я проверил http://localhost:8080/ и конфликт портов.Я отключил брандмауэр Windows, но проблема существует.Может ли кто-нибудь любезно указать мне направление?Любой совет будет полезен!Спасибо вперед!

Прошу прощения за длинный код.Первый для клиента.

import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;

public class MainJApplet extends JApplet {

    GUI gui = new GUI();
    Thread renewThread;

    public void init() {
        //pass parameters from url to applet
        String filePath = this.getParameter("FilePath");
        //temporary solution to bypass the new extention
        String userName = this.getParameter("UserName");
        String ipAddr = this.getParameter("IpAddress");
        String userLevel = this.getParameter("UserLevel");
        String ticket = this.getParameter("Ticket");
        String accessMode = this.getParameter("AccessMode"); //1-normal 2-shared 3-email

        //sharedTo will be get from the file path infor
        String sharedTo = this.getParameter("ShareTo");
        String type = this.getParameter("Type");

        gui.shareTo = sharedTo;
        gui.ticket = ticket; //this gui.ticket is used to varify email access, will be replaced

        String relativePath = "";
        try {
            //connect to servlet

            URL url = new URL(ipAddr);
            URLConnection connection = url.openConnection();

            connection.setDoOutput(true);
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
            //Passing NAME+FILE+TICKET+TYPE to server at the initialization stage
            out.write("IN");
            out.write(userName + "#");
            out.write(filePath + "#");
            out.write(ticket + "#");
            out.write(type + "#");
            out.close();

            //Wait for server response
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                    connection.getInputStream()));

            String dcodedStr;
            StringBuffer decodedStringBuffer = new StringBuffer("");
            while ((dcodedStr = in.readLine()) != null) {
                decodedStringBuffer.append(dcodedStr);
            }

            String dStr = decodedStringBuffer.toString();
            in.close();

            if (dStr.equals("NOT_AUTHORIZED")) { //not passing authentication check
                JOptionPane.showMessageDialog(new JFrame(),
                        "Access Denied",
                        "Warning!",
                        JOptionPane.ERROR_MESSAGE);
                return;
            } else {//pass authentication check
                String[] initResp = dStr.split("#");
                gui.FID = initResp[0]; //file ID
                gui.EditMode = Boolean.parseBoolean(initResp[1]);
                gui.userLevel = 1; //temporary set all as normal user
                boolean firstOpen = Boolean.parseBoolean(initResp[2]);
                relativePath = initResp[3];
                if (initResp[4].trim().equals("normal")) {//owner
                    gui.accessMode = 1;
                } else {//shared user
                    gui.accessMode = 2;
                }
            }
        }catch(UnknownServiceException exp){
            exp.printStackTrace();
        }catch(IOException ex){
            ex.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }
}

    public void destroy() {
        gui.check_upon_window_close();

        if (gui.is_new_drawing == 0) {
            //2010.9.29 workDir -> FID
            if (gui.EditMode) {
                RequestServer.canClose(gui.IpAddress, gui.user, gui.FID);
            } else {
                RequestServer.canCloseNoEdit(gui.IpAddress, gui.user, gui.FID);
            }
        }
        renewThread.stop();
    }
}

1 Ответ

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

Исходя из ваших комментариев, я предполагаю, что ваш сервер привязан к адресу обратной связи (127.0.0.1, он же localhost). Вы не опубликовали, что такое серверное программное обеспечение, но изменили его конфигурацию так, чтобы вместо него он связывался с 0.0.0.0. Это должно исправить вашу проблему.

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