Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自java中服务器的错误_Java_Multithreading - Fatal编程技术网

来自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"

我有下面的代码,它是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);
        }

    }

}
但问题是我无法使服务器处于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您可以(而且应该!)编辑此问题。我相信我的代码格式正确!对于小代码,我确实喜欢缩进,但它确实是一个大代码。无论如何,我想问题已经得到了回答。