Loopback / Localhost问题

时间:2011-09-22 02:35:38

标签: c# client-server localhost tcpclient loopback

我对套接字/客户端有疑问....

我刚刚用C#编写了一个客户端服务器程序。我想知道,你如何连接到具有不同IP地址的计算机。例如,如果我想在两台不同的机器上单独运行客户端和服务器,则loopback(或使用localhost)将不允许这样做....

不太熟悉网络,任何帮助将不胜感激..这是我的客户端代码处理环回:

TcpClient client = new TcpClient();

IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);

3 个答案:

答案 0 :(得分:5)

您只需知道服务器的IP地址,并在客户端代码中指定。

您可以在命令提示符下键入ipconfig /all来获取IP。请注意,这只会为您提供与本地网络的连接。

如果您尝试通过Internet执行此操作,则需要使用能够找到WAN(广域网)IP地址的服务。你可以谷歌如何做到这一点,因为没有“标准”服务来做到这一点。

如果您有路由器,则需要将端口转发到运行该服务的计算机。查看Network Address Translation,查看路由器的文档,或致电技术支持。或谷歌“如何转发端口?”。

设置好网络并了解所有连接信息后,假设您使用的是TcpListener

  • 在服务器端,只需使用IpAddress.Any设置TcpListener即可。指定您尚未使用的任何端口号(8888)。
  • 在客户端,连接到服务器的IP地址。将IPAddress.Parse("127.0.0.1")8888替换为服务器的端口和地址。

答案 1 :(得分:2)

OverMars的解决方案并不好,因为像ipchicken这样的第三方网站会为您提供WAN IP。本地连接不起作用。如果您需要更多信息,请查找NAT(网络地址转换)。

如果您想要一台单独的机器连接,只需绑定到“任意”地址即可。

TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, 8888);

请注意,“Any”会转换为地址“0.0.0.0”。

答案 2 :(得分:2)

127.0.0.1是运行应用程序的“此计算机”或设备的内部地址。每台计算机在现代网络上都有127.0.0.1和至少1个其他IP地址。

要查找其他Windows计算机的IP地址,可以从命令提示符处使用ipconfig。你会得到这样的东西:

Windows IP配置

Ethernet adapter Local Area Connection:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 10.0.0.2
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 10.0.0.1

在这种情况下,10.0.0。 2 是您可以用来从其他计算机连接到它的IP地址。像这样:

TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("10.0.0.2"), 8888);  
client.Connect(serverEndPoint);

Windows计算机还将具有JimsPCJimsPC.abc.com等名称,也可以在TcpClient构造函数或BeginConnectConnect方法中使用像这样。

TcpClient client = new TcpClient("JimsPC", 8888);

TcpClient client = new TcpClient();
client.Connect("JimsPC", 8888);