来自java中服务器的错误
我有下面的代码,它是java中的线程池,只接受一个客户端来自java中服务器的错误,java,multithreading,Java,Multithreading,我有下面的代码,它是java中的线程池,只接受一个客户端 public class ServerThread implements Runnable { ServerSocket serverSocket; Socket clientSocket; protected boolean isStopped = false; int serverPort = 6500; private String serverIpAddress = "127.0.0.1"
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);
}
}
}
但问题是我无法使服务器处于ON状态。
我的意思是,一旦我按下run,就会出现以下错误:
java.net.SocketException:套接字尚未绑定
位于java.net.ServerSocket.accept(未知源)
在servers.ServerThread.run(ServerThread.java:60)
位于java.lang.Thread.run(未知源)
java.net.BindException:地址已在使用中:JVM\u Bind
位于java.net.PlainSocketImpl.socketBind(本机方法)
位于java.net.PlainSocketImpl.bind(未知源)
位于java.net.ServerSocket.bind(未知源)
位于java.net.ServerSocket.bind(未知源)
在servers.ServerThread.run(ServerThread.java:44)
位于java.lang.Thread.run(未知源)
即使我关闭整个应用程序并再次运行,仍然会出现相同的错误……有人知道为什么吗?谢谢 其他一些程序已经在使用端口6500。检查您是否正在运行程序的另一个实例 试着跑步
netstat -lp
查看哪些进程正在使用哪些端口。创建ServerSocket并将其分配给ServerSocket变量时,请确保run()方法中的netstat
输出中未列出要侦听的端口:
serverSocket=新的serverSocket()
请在ServerSocket构造函数中提供端口号,如5000
serverSocket=新的serverSocket(5000)
阅读未插入的代码确实很痛苦。请格式化。您是否尝试了其他端口?@Talha您可以(而且应该!)编辑此问题。我相信我的代码格式正确!对于小代码,我确实喜欢缩进,但它确实是一个大代码。无论如何,我想问题已经得到了回答。