【问题标题】:error from a server in java来自java中服务器的错误
【发布时间】: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


【解决方案1】:

在 run() 方法中,当您创建一个 ServerSocket 并将其分配给 serverSocket 变量时:

serverSocket = new ServerSocket();

请在ServerSocket构造函数中给出一个端口号,比如5000

serverSocket = new ServerSocket(5000);

【讨论】:

    【解决方案2】:

    其他一些程序已经在使用端口 6500。请检查您是否正在运行您的程序的另一个实例。

    尝试运行

    netstat -lp
    

    查看哪些进程正在使用哪些端口。确保netstat 的输出中未列出您要侦听的端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多