3

我正在使用 C# 开发一个简单的 hello world TCP/IP 客户端服务器应用程序,但无法让我的客户端连接。谁能提供任何额外的故障排除步骤?我开始没有想法了...

以下是相关的代码部分:

服务器:

Console.Out.WriteLine("About to bind address");
IPAddress ipAd = IPAddress.Parse("127.0.0.1"); 
Console.Out.WriteLine("Choose a port to bind...");

String port = Console.In.ReadLine();
int iPort = Int32.Parse(port);

TcpListener myList = new TcpListener(ipAd, iPort);

myList.Start();

Console.WriteLine("The server is running at: "+myList.LocalEndpoint);
Console.WriteLine("Waiting for a connection.....");

Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

客户:

Console.Out.WriteLine("enter address: ");
string address = Console.In.ReadLine();
Console.Out.WriteLine("enter port: ");
int port = Convert.ToInt32(Console.In.ReadLine());

TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");

Console.Out.WriteLine("Address: " + address + ":" + port);
tcpclnt.Connect(address, port);

我能够从客户端机器 ping 服务器,但是我无法使用绑定端口远程登录到服务器。我尝试了各种端口(一些在 8000 的低端,一些在 40000 左右)。我在两个系统上都禁用了 Windows 防火墙。这些系统连接到不在互联网上的路由器。我尝试过设置和不设置端口转发以将给定端口上的传入请求转发到服务器机器,但没有任何效果。

我能够捕获的唯一异常是客户端抛出的:

由于目标机器主动拒绝,无法建立连接。

我检查了一个InnerException,但似乎没有 - 这是基本异常。这可能是对的吗?

不知道我还应该看什么 - 任何额外的故障排除步骤都会有所帮助。

谢谢!

4

5 回答 5

9

我以前遇到过这个。诀窍是绑定到0.0.0.0而不是127.0.0.1. 当您绑定到127.0.0.1服务器时,将只接受来自 localhost 的连接。绑定到0.0.0.0它将接受所有请求。

您可能还想从客户端映射主机并查看它认为哪些端口处于打开状态。

编辑:如果您在其中硬编码机器的 IP 地址,则侦听器将仅在该网络接口上侦听。如果您使用0.0.0.0侦听器,将侦听所有可用的网络接口。这包括您的计算机和连接 USB 的手持设备、第二张网卡或 VPN 链接之间的接口。

于 2009-02-13T18:39:24.270 回答
6

上面的代码正在监听来自环回地址的请求。这将有效地仅侦听该网络上的连接,并且该网络仅包括您的计算机。

您是否尝试过监听绑定到连接应该来自的网络的地址?在本地网络上,它应该类似于 192.168.xx 或 10.xxx

于 2009-02-13T18:35:57.650 回答
3

在您的机器上尝试netstat -al(确切的命令行在 Windows 和 unix 之间有所不同)并查看服务器是否正在侦听端口

于 2009-02-13T18:35:04.860 回答
1

为什么不使用 .NET 远程处理?它比做一个 TCP/IP 客户端服务器要好。您可以在对象之间传递消息。

于 2009-02-13T18:38:16.800 回答
1

您是否尝试在同一台机器上运行客户端服务器以确保首先建立连接?除此之外,尝试使用分配的路由器或运行服务器的机器的静态 IP 与绑定到环回。

于 2009-02-13T18:38:45.410 回答