【问题标题】:Java Socket Client Unable to Connect to C# Socket ServerJava Socket 客户端无法连接到 C# Socket 服务器
【发布时间】:2025-11-28 16:55:01
【问题描述】:

我有一个用例,我必须将数据从 .NET 应用程序发送到 Java 应用程序,并且我正在尝试使用套接字来执行此操作。我有一个使用 C# 创建的服务器 -

        TcpListener tcpListener = null;
        IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];

        try
        {
            // Set the listener on the local IP address 
            // and specify the port.
            tcpListener = new TcpListener(ipAddress, 13);
            tcpListener.Start();
            Console.WriteLine("The server is running at port 13...");
            Console.WriteLine("The local End point is  -" +
                              tcpListener.LocalEndpoint);
            output = "Waiting for a connection...";
            Console.WriteLine(output);

            Socket s = tcpListener.AcceptSocket();
            Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
        }
        catch (Exception e)
        {
            output = "Error: " + e.ToString();
            Console.WriteLine(output);
        }
    }

在 Java 方面,我创建了一个侦听相同主机和端口的套接字 -

Socket socket;
    try {
        socket = new Socket( "localhost", 13);
        System.out.println("Connection established");
        BufferedReader input =
                new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String answer = input.readLine();
        System.out.println(answer);
        socket.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

我收到以下错误 - java.net.ConnectException:连接被拒绝:连接。我使用 telnet localhost 13 来检查我的服务器是否真的在运行,并且确实在运行。所以我不认为这可能是服务器未运行或防火墙的问题,因为两者都在本地运行。有关如何解决此问题的任何想法?

【问题讨论】:

  • 尝试使用更高范围的端口号,即数千个系列
  • 您也可以尝试绑定到通配符地址 (0.0.0.0)。也许你在 localhost 上也有一个 IPv6 绑定,而你的 c# 服务器只监听它。
  • 如果使用 ip 地址 127.0.0.1(本地主机),net 库中的 connect 方法会出现异常。使用连接方式时需要使用PC的IP地址。侦听器应使用 IPAddress.Any。 Windows操作系统会自动将消息从PC IP地址转发到虚拟套接字IP.Any。
  • @Sanjeev - 已经试过了,没用。
  • 不,只是java可能会给出同样的错误。 windows 文件夹中有一个定义 localhost 的主机文件。在某些 PC 上,它是一个 IP 地址,其他人使用环回地址 127.0.0.1。 heinzbeinz 为服务器提供了解决方案,但没有为创建异常的 java 客户端提供解决方案。我认为这两种解决方案都需要。 java客户端将无法连接到当前服务器。

标签: java c# sockets


【解决方案1】:

我尝试了您的代码,但遇到了完全相同的问题。您的 C# TCP 服务器仅绑定到 IPv6 接口(例如检查资源监视器侦听地址)。如果您将服务器更改为new TcpListener(IPAddress.Any, 13),它应该可以工作。

【讨论】:

  • 太棒了。它确实有效。但是,如果我想绑定一个IPV4接口,而不是IPV6,可以吗?
  • 您可以通过以下方式过滤您的 ipadresses:IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList.First(a => a.AddressFamily == AddressFamily.InterNetwork)
最近更新 更多