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)
答案 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
,因为该端口已经在使用中。