【发布时间】:2011-06-11 16:19:59
【问题描述】:
我有以下代码,它是 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: 套接字尚未绑定 在 java.net.ServerSocket.accept(未知来源) 在servers.ServerThread.run(ServerThread.java:60) 在 java.lang.Thread.run(未知来源) java.net.BindException:地址已在使用中:JVM_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(Unknown Source)
即使我关闭了整个应用程序并再次运行它,仍然出现同样的错误....有人知道为什么吗?谢谢!
【问题讨论】:
-
这对于阅读未缩进的代码来说真的很痛苦。请格式化。
-
你试过不同的端口吗?
-
@Talha 您可以(而且应该!)编辑问题。
-
我相信我的代码格式正确!
-
对于小代码我喜欢缩进,但它确实是一个大代码。无论如何,我想问题已经得到解答。
标签: java multithreading