线程" main"中的例外情况java.net.ConnectException:拒绝连接:连接Socket编程Java

时间:2016-11-01 13:57:17

标签: java sockets server client

我最近了解客户端和服务器之间的套接字编程。所以我想做一个连接客户端和服务器的练习。但是,当我尝试运行代码时遇到此错误消息: 线程中的异常" main" java.net.ConnectException:连接被拒绝:连接

这是我的客户端类代码:

public class clientpart {
    public static void main(String[]args) throws UnknownHostException, IOException {
        Scanner input = new Scanner(System.in);
        int port = 8080;
        String host=null;
        String answer; String sendMessage; String receivedMessage;
        InetAddress address = InetAddress.getByName(host);
        Socket socket= new Socket(address,port);

        OutputStream os = socket.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);

        System.out.println("Please answered the following question: ");
        System.out.println("What is the subject code for Socket Programming?");
        answer = input.nextLine();

        sendMessage = answer;
        bw.write(sendMessage);
        bw.newLine();
        bw.flush();
        System.out.println("Message sent to server: "+sendMessage);

        InputStream is = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        receivedMessage = br.readLine();
        System.out.println("Message received from server : " + receivedMessage);
    }
}

这是我的服务器代码:

public class serverpart {
    public static Socket socket;
    public static void main(String[]args) throws IOException {
        int port = 8080;
        String answer; String returnedMessage; String reply;
        ServerSocket server = new ServerSocket(port);
        System.out.println("Server start at port "+port+".");

        while(true)
        {
            socket = server.accept();
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            answer = br.readLine();
            System.out.println("Message sent from client: " + answer);

            if("NET 3202".equals(answer) || "net 3202".equals(answer) || "NET3202".equals(answer) || "net3202".equals(answer)){
                reply = "Correct!";
                returnedMessage = reply;
            }
            else{
                reply = "Wrong!";
                returnedMessage = reply;
            }

            OutputStream os = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write(returnedMessage);
            bw.newLine();
            System.out.println("Message replied to client: "+returnedMessage);
            bw.flush();
        }
    }
}

完整的错误消息是:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:244)
at clientpart.main(clientpart.java:13)
C:\Users\PeiErn\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

我希望有人可以帮助我,谢谢。

1 个答案:

答案 0 :(得分:4)

您的计划中有两个问题:

  1. 您使用的端口80well-known ports系统端口(0到1023)的一部分,因此您需要启动具有管理员权限的服务器或例如,将其更改为8080
  2. 您忘记在每个bw.write(sendMessage)之后致电bw.newLine(),以便等待,因为您打电话给br.readLine(),这意味着它在您等待的同时等待整行39; t发送行尾字符。
  3. 更改您的代码:

    服务器部分:

    public class serverpart {
        public static Socket socket;
        public static void main(String[]args) throws IOException {
            int port = 8080;
            ...
                BufferedWriter bw = new BufferedWriter(osw);
                bw.write(returnedMessage);
                bw.newLine();
                ...
    

    输出:

    Server start at port 8080.
    Accepted
    Message sent from client: net3202
    Message replied to client: Correct!
    

    客户端部分:

    public class clientpart {
        public static void main(String[]args) throws IOException {
            Scanner input = new Scanner(System.in);
            int port = 8080;
            ...
            bw.write(sendMessage);
            bw.newLine();
            bw.flush();
            ...
    

    输出:

    Please answered the following question: 
    What is the subject code for Socket Programming?
    net3202
    Message sent to server: net3202
    Message received from server : Correct!