【发布时间】: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客户端将无法连接到当前服务器。