gpt4 book ai didi

Java:端口不可用(在 Windows 7 上)

转载 作者:行者123 更新时间:2023-12-01 06:20:18 26 4
gpt4 key购买 nike

已解决:问题是“病毒”或类似的东西劫持了端口。OBS:病毒以某种方式劫持了 por,该端口没有出现在 netstat -an 或正在使用的端口的 TCPView 上。

我使用AVG防病毒软件清除了该病毒。另一种防病毒软件不起作用,只有 AVG。

<小时/>

我做了这个程序来检查端口是否可用:

package com.test;

import java.io.IOException;
import java.net.DatagramSocket;
import java.net.ServerSocket;

public class Test {
public static void main(String[] args) {
System.out.println("Port available: " + available(62974));
}
public static boolean available(int port) {
ServerSocket ss = null;
try {
ss = new ServerSocket(port);
ss.setReuseAddress(true);
return true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return false;
}
}

响应是错误

抛出的异常是:

java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
at java.net.ServerSocket.bind(ServerSocket.java:328)
at java.net.ServerSocket.<init>(ServerSocket.java:194)
at java.net.ServerSocket.<init>(ServerSocket.java:106)
at com.dgs.test.Test.available(Test.java:16)
at com.dgs.test.Test.main(Test.java:9)

我正在使用此端口:62​​974

但我检查控制台/提示符:

netstat -ano 

端口不在列表中

我没有使用任何防火墙,我已停用它

我是否采取了正确的措施来查看端口是否可用?

这是一个“不可用”端口吗?

最佳答案

在本地或远程测试 Activity 的 TCP/UDP 端口时,您的代码应该尝试成为客户端而不是服务器。

package com.test;

import java.io.IOException;
import java.net.Socket;

public class PortScan {
public static void main(String[] args) {
if (args.length > 0 ){
System.out.println("Port active: " + available(args[0], args[1]));
}
else System.out.println("Usage: PortScan <ip> <port>");
}

public static boolean available(String ip, String port) {
boolean status = false;
Socket ss = null;
try {
ss = new Socket(ip, Integer.parseInt(port));
status = true; //there is a listening port
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return status;
}
}

获取当前的 Nestat -ano 结果:

  TCP    192.168.72.1:139       0.0.0.0:0              LISTENING       4
TCP 192.168.184.1:139 0.0.0.0:0 LISTENING 4
UDP 0.0.0.0:445 *:* 4

当您测试 PortScan 127.0.0.1 时,当 UDP 服务已处于 Activity 状态但未在 127.0.0.1:445 处监听或 TCP 服务处于 Activity 状态且正在 192.168.184.1:139 处监听时445PortScan 192.168.184.1 139,它将连接并显示“Port active: true”:

当给定端口没有服务时(可能不活动或被阻止);假设“127.0.0.1:446”,它会捕获“连接被拒绝”并说“端口 Activity :假”:

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.test.PortScan.available(PortScan.java:18)
at com.test.PortScan.main(PortScan.java:9)
Port active: false

但是,您需要检查它拒绝的原因;它真的不活跃还是被防火墙阻止了?这是一个棘手的问题,您需要找出答案。

之后,您可以编码成为服务器并尝试在空闲/非 Activity 端口上建立自己,如下所示:

        ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(Integer.parseInt(port));
serverSocket.setReceiveBufferSize(2048);
serverSocket.setSoTimeout(0);
serverSocket.setReuseAddress(true);
socket = serverSocket.accept();
} catch (NumberFormatException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

//do something here in a loop

try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

更新:

当您尝试再次连接另一次运行时,请确保先前的运行(涉及服务器代码部分)已在 Eclipse 中正确关闭。在测试之前检查 Eclipse 的调试 View 并关闭有问题的先前运行。否则,当尝试在已处于 Activity 状态的同一端口上建立服务器代码时,您将收到 BindException

要检查服务器端口是否已建立,请使用:

netstat -ano | find "62974"

关于Java:端口不可用(在 Windows 7 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10098722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com