我对套接字/客户端有疑问....
我刚刚用C#编写了一个客户端服务器程序。我想知道,你如何连接到具有不同IP地址的计算机。例如,如果我想在两台不同的机器上单独运行客户端和服务器,则loopback(或使用localhost)将不允许这样做....
不太熟悉网络,任何帮助将不胜感激..这是我的客户端代码处理环回:
TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
答案 0 :(得分:5)
您只需知道服务器的IP地址,并在客户端代码中指定。
您可以在命令提示符下键入ipconfig /all
来获取IP。请注意,这只会为您提供与本地网络的连接。
如果您尝试通过Internet执行此操作,则需要使用能够找到WAN(广域网)IP地址的服务。你可以谷歌如何做到这一点,因为没有“标准”服务来做到这一点。
如果您有路由器,则需要将端口转发到运行该服务的计算机。查看Network Address Translation,查看路由器的文档,或致电技术支持。或谷歌“如何转发端口?”。
设置好网络并了解所有连接信息后,假设您使用的是TcpListener
:
IpAddress.Any
设置TcpListener
即可。指定您尚未使用的任何端口号(8888
)。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计算机还将具有JimsPC
或JimsPC.abc.com
等名称,也可以在TcpClient
构造函数或BeginConnect
,Connect
方法中使用像这样。
TcpClient client = new TcpClient("JimsPC", 8888);
或
TcpClient client = new TcpClient();
client.Connect("JimsPC", 8888);