“线程中的异常”;“主要”;java.net.ConnectException:连接被拒绝:连接套接字编程java

“线程中的异常”;“主要”;java.net.ConnectException:连接被拒绝:连接套接字编程java,java,sockets,server,client,Java,Sockets,Server,Client,我最近学习了客户端和服务器之间的套接字编程。所以我想做一个连接客户端和服务器的练习。但是,我在尝试运行代码时遇到以下错误消息: 线程“main”java.net中出现异常。连接异常:连接被拒绝:连接 这是我的客户端类代码: public class clientpart { public static void main(String[]args) throws UnknownHostException, IOException { Scanner input = new

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

这是我的客户端类代码:

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)
线程“main”java.net.ConnectException:连接被拒绝:连接 位于java.net.DualStackPlainSocketImpl.connect0(本机方法) 位于java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 位于java.net.socksocketimpl.connect(socksocketimpl.java:392) 位于java.net.Socket.connect(Socket.java:589) 位于java.net.Socket.connect(Socket.java:538) 位于java.net.Socket。(Socket.java:434) 位于java.net.Socket(Socket.java:244) 位于clientpart.main(clientpart.java:13) C:\Users\PeiErn\AppData\Local\NetBeans\Cache\8.1\executor snippets\run.xml:53:Java返回:1 生成失败(总时间:1秒)
我希望有人能帮助我,谢谢。

您的计划中有两个问题:

  • 您使用的端口
    80
    是或系统端口(0到1023)的一部分,因此您需要使用管理员权限启动服务器,或者将其更改为
    8080
  • 您忘记在每次
    bw.write(sendMessage)
    之后调用,这样它会一直在您调用的另一端等待,这意味着它会等待整行,而您不会发送行尾字符
  • 为此更改您的代码:

    服务器部分:

    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();
                ...
    
    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();
            ...
    
    输出:

    客户端部分:

    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();
                ...
    
    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();
            ...
    
    输出:


    我可能会在您接受连接后(在服务器上)和连接后(在客户机上)同时生成输入/输出流。我相信它正在经历,因为它们在不同的“线程”上运行,所以流不会同时被创建。哪个会导致错误?idk?只是我的意见。谢谢@nicolas格式化海报的代码。原始海报:发布格式错误的代码只会让你的问题更难阅读和理解——为什么这样做?唯一的问题是你的端口号。您不能使用保留端口。只要把端口号改成9085就行了work@MdAyubAliSarker我试图将端口号更改为80以外的其他端口号,但客户端类向我显示了以下错误:线程“main”中出现异常java.net.ConnectException:Connection拒绝:connect'ConnectException:Connection拒绝'仅表示您在客户端中的主机名或IP地址或端口错误,或者您在运行客户端时没有启动服务器。当我将端口更改为8080时,它给我以下错误消息:线程“main”中出现异常java.net.ConnectException:连接被拒绝:connect我还检查服务器是否正在侦听端口8080,而不是端口8080。这就是问题所在吗?谢谢。您在客户端和服务器上都更改了吗?您是否在同一台机器上启动这两个程序?是的,是的,连接被拒绝意味着服务器没有监听或者防火墙阻止了这个端口上的请求。因此,我必须先启动服务器哦,我的上帝,非常感谢你的帮助!是的,您必须始终首先启动服务器