如何杀死Windows 7下的打开服务器套接字?

时间:2012-10-10 13:41:25

标签: java eclipse sockets client

我编写了一个简单的服务器客户端套接字程序,当我重新编译服务器时,我得到了:

java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
    at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)

因此我的问题是如何杀死Windows 7下的套接字?是否有可能在eclipse中杀死它?

感谢您的回答!!

4 个答案:

答案 0 :(得分:2)

杀掉jvm,当我遇到它时解决了这个问题。您是否在停止简单服务器之前关闭代码中的套接字?

答案 1 :(得分:2)

与RGdev一样,我假设您仍然在后台运行javaw进程,以保持连接打开。但它也可能是您计算机上的一个不同的服务器程序,它会占用您想要使用的端口。

您可以在cmd shell中找到哪些进程正在使用netstat命令侦听哪个端口。以下参数列出(a)包括服务器在内的所有连接,(b)显示打开连接的可执行文件,以及(n)禁止用已知端口的服务名替换端口号。

netstat -abn

答案 2 :(得分:0)

这是我的服务器端代码:

import java.io.*;
import java.net.*;

public class ServerSide {


    public static void main(String[] args) {

        try
        {
            ServerSocket myServerSocket = new ServerSocket(9999);
            System.out.println("Server is waiting on host" + InetAddress.getLocalHost().getCanonicalHostName() + "port= "+ myServerSocket.getLocalPort());
            Socket skt = myServerSocket.accept();

            BufferedReader myInput = new BufferedReader(new InputStreamReader(skt.getInputStream()));
            PrintStream myOutput = new PrintStream(skt.getOutputStream());

            String buf = myInput.readLine();
            System.out.println("Server readLine");
            if(buf!=null)
            {
                System.out.println("Buf = " + buf);
                myOutput.print("Got it?");
            }
            else
            {
                System.out.println("Nothing returned in server sidex`x  ");
            }
            skt.close();
            System.out.println("Server shutdown");
        }
        catch(IOException e)
        {
            e.printStackTrace();
            System.out.println("Whooops");
        }
    }

}

正如你所看到的清​​理我写的:

        skt.close();

但也许这不是你的问题,也许你的问题是我1小时前的问题;)我曾经运行一个程序,但结果不是我的预期,所以我修改它并再次运行但是端口很忙或已经在使用中!我在日食上做了什么?在您收到错误的控制台下,窗口右侧有红色矩形按钮!它说“终止”。如果你点击它,你的端口将是免费的。顺便说一下,不要忘记检查控制台(服务器/客户端)。

答案 3 :(得分:0)

当进程已经终止时,您也可以收到此错误消息。 TCP具有时间等待状态。此状态用于确保不会将来自旧连接的TCP数据包传递到在同一端口侦听的新进程。通常,您应该使用ServerSocket.setRuseAddress(true)来避免此问题。