2

我有一个关于套接字/客户端的问题....

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

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

TcpClient client = new TcpClient();

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

3 回答 3

5

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

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

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

如果您有路由器,则需要将端口转发到运行您的服务的机器。查找网络地址转换,并查看您的路由器的文档,或致电技术支持。或谷歌“我如何转发端口?”。

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

  • 在服务器端,只需TcpListener使用IpAddress.Any. 指定您喜欢的任何尚未使用的端口号 ( 8888)。
  • 在客户端,连接到服务器的 IP 地址。将IPAddress.Parse("127.0.0.1")和替换8888为服务器的端口和地址。
于 2011-09-22T02:48:55.123 回答
2

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

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

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

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

于 2011-09-22T02:48:20.207 回答
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);
于 2011-09-22T03:14:40.000 回答