我有以下代码,它是java中的一个线程池,仅接受一个客户端
public class ServerThread implements Runnable {
ServerSocket serverSocket;
Socket clientSocket;
protected boolean isStopped = false;
int serverPort = 6500;
private String serverIpAddress = "127.0.0.1";
DataInputStream is;
ObjectOutputStream os=null;
protected BlockingQueue queue = null;
protected ExecutorService threadPool2 =
Executors.newFixedThreadPool(1);
public ServerThread(BlockingQueue queue) {
this.queue=queue;
}
public void run() {
try {
InetSocketAddress serverAddr = new InetSocketAddress(serverIpAddress, serverPort);
serverSocket = new ServerSocket();
serverSocket.bind(serverAddr);
System.out.println("s-a creat");
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
} catch (IOException e) {
e.printStackTrace();
}
while(!isStopped()){
clientSocket=null;
try{
clientSocket = serverSocket.accept();
}
catch(Exception e)
{
e.printStackTrace();
}
WorkerServerRunnable workerRunnable = new WorkerServerRunnable(queue,clientSocket);
this.threadPool2.execute(workerRunnable);
}
this.threadPool2.shutdown();
System.out.println("Server Stopped.");
}
private synchronized boolean isStopped(){
return this.isStopped;
}
public synchronized void stop() {
this.isStopped = true;
try {
this.serverSocket.close();
} catch (IOException e) {
throw new RuntimeException("Error closing server", e);
}
}
}
但问题是我无法让我的服务器处于开启状态。 我的意思是,一旦我按下运行键,我就会收到以下错误:
java.net.SocketException: Socket is not bound yet at java.net.ServerSocket.accept(Unknown Source) at servers.ServerThread.run(ServerThread.java:60) at java.lang.Thread.run(Unknown Source) java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at servers.ServerThread.run(ServerThread.java:44) at java.lang.Thread.run(Unknown Source)
即使我关闭整个应用程序并再次运行它仍然出现相同的错误......有人知道为什么吗?谢谢!
最佳答案
某些其他程序已在使用端口 6500。请检查您是否没有运行该程序的另一个实例。
尝试运行
netstat -lp
查看哪些进程正在使用哪些端口。确保您要监听的端口未在 netstat
的输出中列出。
关于java - java中来自服务器的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317064/