【问题标题】:Why does my client Socket not connect to my ServerSocket?为什么我的客户端 Socket 没有连接到我的 ServerSocket?
【发布时间】:2015-11-01 23:15:01
【问题描述】:

在这个非常基本的客户端/服务器套接字程序中,为什么我的客户端套接字从不连接并抛出java.net.ConnectException?我在一台计算机上运行 MessageServer 程序,在同一网络上的另一台笔记本电脑上运行 ClientServer 程序。我已经使用该计算机上的 windows cmd 中的 ipconfig 命令验证了运行服务器程序的计算机的本地 IP 是 10.0.0.1。

服务器:

package server;

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

public class MessageServer {

    public static void main(String args[]) {
        ServerSocket serverSocket = null;

        try {
            serverSocket = new ServerSocket(4302);
        }
        catch (Exception e) {
            System.out.println("well bad news...");
        }

        boolean noConnection = true;
        while(noConnection == true) { 
            try {
                Socket client = serverSocket.accept();
                System.out.println("socket connection accepted:" + client.getRemoteSocketAddress().toString());
                noConnection = false;

            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.out.println("fail");
            }

    }
    }
}

客户:

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

    public class MessageClient {
        public static void main(String args[]) {
            Socket clientSocket = null;
            String recieve;
            try {
                clientSocket = new Socket("10.0.0.1", 4302);
            } catch (Exception e) {
                System.out.println("deal with it...");
                e.printStackTrace();
            }


        }
    }

当我运行这两个程序时,我在客户端机器上得到以下结果:

java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(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 MessageClient.main(MessageClient.java:10)

服务器机器上没有问题。

编辑: 我尝试禁用我的互联网安全(Norton 360),但没有帮助。此外,我正在(在两台计算机上)运行 Windows 10、Java 8 Update 65、Eclipse IDE Mars 1

编辑 2: 如果有帮助,我尝试在一台计算机上运行程序的两个部分,这可行。所有迹象都指向 Windows 防火墙问题。我会尽快解决这个问题。

【问题讨论】:

  • 最可能的原因:Windows 防火墙。
  • @HarryJohnston 惊讶,微软 Windows 把我搞砸了。哦等等,没关系.. =\.

标签: java windows sockets network-programming serversocket


【解决方案1】:

好的,所以我终于解决了这个问题。只是为遇到同样问题的任何人提供这个答案。创建客户端套接字时,您也需要直接指定机器的本地 ipv4 连接。由于某种原因,本地主机不允许它连接,并说 LAN 连接拒绝连接。所以EX代码:

Socket client = new Socket("10.0.0.8", 5566); 

代替:

Socket client = new Socket("localhost" 5566);

如果您正在寻找 ipv4,请在服务器机器上打开 CMD(Windows),然后输入 ipconfig。然后在Ethernet adapter Local Area Connection: 下使用IPv4 地址下列出的地址。

【讨论】:

    【解决方案2】:

    您计算机的本地 IP 是什么并不重要。您的服务器在 localhost 上运行,因此您需要连接到 localhost。

    改成

    clientSocket = new Socket("10.0.0.1", 4302);
    

    clientSocket = new Socket("localhost", 4302);
    

    当您在 VPS 上托管服务器时,您可以将 localhost 更改为 VPS 的 IP。

    您也可以使用“127.0.0.1”代替“localhost”。

    编辑 根据你现在得到的异常,

    当服务器未在您尝试连接的端口上侦听时发生异常。

    要么您没有启动服务器,要么服务器不接受连接,或者客户端和服务器上的端口号不同。

    编辑 2

    由于您在不同的 PC 上运行客户端和服务器(假设不同的网络),您需要端口转发您的路由器以接受连接。

    更多关于端口转发here

    此外,您可以使用此网站来帮助您进行端口转发。 Port Forwarding

    【讨论】:

    • 是的,我想,我之前尝试过,但没有成功。也只是重试确认,同样的结果:净异常。
    • 添加一个 e.printStackTrace();在您系统打印服务器之前说坏消息,以检查端口是否已被使用。可能是您已经在使用 4302 端口。程序对我来说运行良好。
    • 另外,我尝试在 3 个不同的端口(5065、10200、8477)上运行它
    • 好的,所以,让我们一一进行,因为我认为我已经满足了这些要求。当我想运行这些程序时,我首先在我的电脑上启动服务器程序,然后一旦它打开,我就会在我的笔记本电脑上启动客户端程序。端口号完全相同。我不知道服务器不接受连接是什么意思。
    • 我的桌面上确实安装了 Norton 360,我尝试禁用它然后运行该程序。仍然没有运气。 MS windows防火墙可能是问题吗?我有 Windows 10。
    猜你喜欢
    • 2022-01-15
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多