我编写了一个简单的服务器客户端套接字程序,当我重新编译服务器时,我得到了:
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中杀死它?
感谢您的回答!!
答案 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)
来避免此问题。