ServerSocket构造函数抛出异常

时间:2014-10-12 09:59:23

标签: java

package server;

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


public class TCPServer {
public static void main(String[] args) throws IOException {
    ServerSocket serverSocket =null;
    Socket socket;
    boolean listening = true;

    try {
        serverSocket = new ServerSocket(4444);

    } catch (IOException e) {
        System.err.println("Cannot listen on port: 4444.");
    }

    while (listening){
        socket = serverSocket.accept(); 
    new TCPServerThread(socket).start();
    }
    serverSocket.close();
}

}
此代码提供此错误

Cannot listen on port: 4444.
Exception in thread "main" java.lang.NullPointerException
    at server.TCPServer.main(TCPServer.java:20)

2 个答案:

答案 0 :(得分:0)

您应该在try块内移动accept循环。因为这种方式如果ServerSocket无法监听你的变量serverSocket将为null。

package server;

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

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket =null;
        Socket socket;
        boolean listening = true;

        try {
            serverSocket = new ServerSocket(4444);
            while (listening){
                socket = serverSocket.accept(); 
                new TCPServerThread(socket).start();
            }
        serverSocket.close();
        } catch (IOException e) {
            System.err.println("Cannot listen on port: 4444.");
            e.printStackTrace();
        }
    }

请注意我是如何将e.printStackTrace()添加到catch块中的,该块应包含应用程序拒绝侦听端口4444的原因的详细信息。很可能已经有一个不同的应用程序正在侦听此端口。

答案 1 :(得分:0)

是的,我不知道它为什么抛出NullPointerException,但是当我刚刚调试并检查了异常细节时它是BindException,因为该端口已经在使用中。

相关问题