Java 如何在windows7下杀死打开的服务器套接字?

Java 如何在windows7下杀死打开的服务器套接字?,java,eclipse,sockets,client,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.AbstractPl

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

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)
java.net.BindException:地址已在使用中:JVM\u Bind
位于java.net.DualStackPlainSocketImpl.bind0(本机方法)
位于java.net.DualStackPlainSocketImpl.socketBind(未知源)
位于java.net.AbstractPlainSocketImpl.bind(未知源)
位于java.net.PlainSocketImpl.bind(未知源)
位于java.net.ServerSocket.bind(未知源)
位于java.net.ServerSocket。(未知源)
位于java.net.ServerSocket。(未知源)
因此,我的问题是如何在Windows7下杀死套接字?有没有一种可能的解决方案可以在eclipse中杀死它


谢谢你的回答

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

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

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

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

netstat -abn

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

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

netstat -abn

以下是我的服务器端代码:

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小时前的问题;)我曾经运行过一个程序,但是结果不是我所期望的,所以我修改了它并再次运行它,但是端口很忙或者已经在使用中!我在eclipse上做什么?在出现错误的控制台下方,窗口右侧有一个红色矩形按钮!上面写着“终止”。如果你点击这个按钮,你的端口将是免费的。顺便说一下,不要忘记检查控制台的两个(服务器/客户端)端。

以下是我的服务器端代码:

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小时前的问题;)我曾经运行过一个程序,但是结果不是我所期望的,所以我修改了它并再次运行它,但是端口很忙或者已经在使用中!我在eclipse上做什么?在出现错误的控制台下方,窗口右侧有一个红色矩形按钮!上面写着“终止”。如果你点击这个按钮,你的端口将是免费的。顺便说一句,不要忘记检查控制台的两个(服务器/客户端)端。

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

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