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数据包不能传递到在同一端口侦听的新进程。通常,您应该使用来避免此问题