java - java中来自服务器的错误

标签 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";
    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/

相关文章:

C# PulseAll 不唤醒 sleep 线程

android - 单线程池——ExecutorService 或 Handler + HandlerThread

java - 映射器未正确映射 - mapstruct

java - 如何将List<LinkedBlockingQueue<Long>>提交给ThreadPoolExecutor,每个线程将选择一个LinkedBlockingQueue并并行执行

c# - 进度条行为异常

java - 大数据文件的udp

c# - C# 中对属性的读写是原子的吗?

java - "SQLite JDBC: inconsistent internal state"尝试从 ResultSetMetaData 获取 ColumnCount

java - codenameone 将时间转换为 utc

java - 双向链表的测试问题