Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“Java网络”;连接被拒绝:Connect";_Java_Sockets_Networking_Port - Fatal编程技术网

“Java网络”;连接被拒绝:Connect";

“Java网络”;连接被拒绝:Connect";,java,sockets,networking,port,Java,Sockets,Networking,Port,我一直在尝试让一个简单的网络测试程序在没有结果的情况下运行 服务器: import java.io.*; import java.net.*; public class ServerTest { public static void main(String[] args) { final int PORT_NUMBER = 44827; while(true) { try { //Listen on port Serve

我一直在尝试让一个简单的网络测试程序在没有结果的情况下运行

服务器:

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

public class ServerTest {
    public static void main(String[] args) {
    final int PORT_NUMBER = 44827;

    while(true) {
        try {
        //Listen on port
        ServerSocket serverSock = new ServerSocket(PORT_NUMBER);
        System.out.println("Listening...");

        //Get connection
        Socket clientSock = serverSock.accept();
        System.out.println("Connected client");

        //Get input
        BufferedReader br = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
        System.out.println(br.readLine());

        br.close();
        serverSock.close();
        clientSock.close();
        } catch(Exception e) {
        e.printStackTrace();
        }
    }
    }
}
客户:

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

public class ClientTest {
    public static void main(String[] args) throws IOException {
    final int PORT_NUMBER = 44827;
    final String HOSTNAME = "xx.xx.xx.xx";

    //Attempt to connect
    try {
        Socket sock = new Socket(HOSTNAME, PORT_NUMBER);
            PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
        //Output
        out.println("Test");
        out.flush();

        out.close();
        sock.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
    }
}
当我使用127.0.0.1或我的内部IP作为主机名时,该程序运行良好。但每当我切换到我的外部IP地址时,它就会抛出一个
java.net.ConnectException:Connection-densed:connect
错误

我故意选择了这样一个不寻常的港口,看看这是否是问题所在,但运气不好。 我可以使用telnet进行连接,没有问题,但是当我尝试使用canyouseeme.org访问端口时,它告诉我连接超时。 我甚至尝试禁用所有防火墙和防病毒软件,包括Windows默认防火墙和路由器防火墙,所有端口都转发并启用DMZ,但它仍然说连接超时。我使用Comcast作为我的ISP,我怀疑他们是否阻止了这样一个随机端口

当我使用数据包跟踪器时,它显示我的计算机发送SYN和接收RST/ACK的TCP流量,因此它看起来像一个标准的阻塞端口,没有其他可疑的数据包流量


我不知道现在发生了什么;我几乎已经尝试了我知道的每一个技巧。如果有人知道端口可能被阻塞的原因,或者至少知道程序工作的某种方式,这将非常有用。

很可能服务器套接字仅绑定到本地主机地址。可以使用构造函数的3参数形式将其绑定到特定的IP地址

无论如何,您的代码在我的系统上运行良好


我不想这么说,但这听起来像是防火墙问题(我知道你已经三次检查过了)或是一个问题,这比你想象的更有可能。我想。

我假设您正在使用路由器连接到Internet。您应该进行端口转发,以允许公众访问您的内部网络。看看

我还写了一篇关于端口转发的博客,你可能想看看:)


但我仍然无法通过公共IP访问此文件,现在正在处理此文件…

这些问题出现在以下情况下:

  • 客户端和服务器,其中一个或两个不在网络中

  • 服务器未运行

  • 服务器正在运行,但未在端口上侦听,客户端正在尝试连接

  • 主机端口组合不允许使用防火墙

  • 主机端口组合不正确

  • 连接字符串中的协议不正确

  • 如何解决问题:

  • 首先,您需要ping目标服务器。如果这是正确的ping, 然后客户端和服务器都在网络中

  • 尝试使用telnet连接到服务器主机和端口。如果你是 如果能够连接到它,那么您在客户端代码中就犯了一些错误


  • 我也有同样的问题,因为有时候客户端在服务器之前启动,当他试图建立连接时,它找不到正在运行的服务器

    我的第一个(不那么优雅)解决方案是使用sleep方法停止客户端一段时间:

    try {
       Thread.sleep(1000);
    } 
    catch (InterruptedException e) {
       e.printStackTrace();
    }
    
    我在客户端连接之前使用了这段代码,在您的示例中,就在
    Socket sock=new Socket(主机名、端口号)之前

    我的第二个解决方案是基于答案。基本上,我在客户机类中创建了一个方法,这个方法尝试连接到服务器,如果连接失败,它会等待两秒钟再重试。 这是我的方法:

    private Socket createClientSocket(String clientName, int port){
    
        boolean scanning = true;
        Socket socket = null;
        int numberOfTry = 0;
    
        while (scanning && numberOfTry < 10){
            numberOfTry++;
            try {
                socket = new Socket(clientName, port);
                scanning = false;
            } catch (IOException e) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException ie) {
                    ie.printStackTrace();
                }
            }
    
        }
        return socket;
    }
    

    这个解决方案帮助了我,我希望它也能帮助你

    我可能说的是显而易见的,但你能
    telnet
    到端口吗?这将有助于找到问题所在。尝试的另一个选项是用一个侦听的
    netcat
    替换服务器进程,看看是否可以连接到它。也许有人可以给我一个简单的客户机/服务器程序,他们知道该程序在他们的计算机上可以正常工作。这将帮助我找出问题是否仍然存在于端口转发和防火墙或我的代码中。我尝试了以下方法:
    ServerSocket serverSock=newserversocket(端口号,0,InetAddress.getByName(“192.168.1.102”)但没有骰子。它仍然不工作。但是192.168.1.102不是一个外部地址。这是你的内部地址。我想我不知道你在用哪个地址。我不知道我们走的路是否正确。通常,服务器套接字将绑定到所有可用接口。我开始认为这是一个网络配置问题,而不是服务器套接字本身的问题。答案很好。对我来说,这是2。“服务器未运行”。在客户端运行main之前,您必须确保您的服务器正在运行。因此对于windows,第二个选项帮助了我:telnet{external ip}{port}显示无法访问服务器。当查看日志时,发现有人将空字符串作为ip的值。没有ip=没有连接。
    
    Socket sock = createClientSocket(HOSTNAME, PORT_NUMBER);
    if(null == sock){ //log error... }