我正在运行服务器,我想显示自己的IP地址.
获取计算机自身(如果可能的话,外部)IP地址的语法是什么?
有人写了下面的代码.
IPHostEntry host;
string localIP = "?";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
localIP = ip.ToString();
}
}
return localIP;
Run Code Online (Sandbox Code Playgroud)
但是,我一般不信任作者,我不明白这段代码.有没有更好的方法呢?
我需要找出运行C#应用程序的计算机的外部 IP.
在应用程序中,我有一个连接(通过.NET远程处理)到服务器.有没有一种很好的方法来获取服务器端的客户端地址?
(我已经编辑了这个问题,要更清楚一些.我向所有那些尽力回答这个问题的人道歉,当时我可能有点太模糊了)
解决方案:
我发现了一种对我有用的方法.通过实现我可以访问CommonTransportKeys.IPAddress的自定义IServerChannelSinkProvider和IServerChannelSink,可以很容易地在CallContext上添加客户端ip.
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
IMessage requestmessage, ITransportHeaders requestHeaders,
System.IO.Stream requestStream, out IMessage responseMessage,
out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
try
{
// Get the IP address and add it to the call context.
IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
CallContext.SetData("ClientIP", ipAddr);
}
catch (Exception)
{
}
sinkStack.Push(this, null);
ServerProcessing srvProc = _NextSink.ProcessMessage(sinkStack, requestmessage, requestHeaders,
requestStream, out responseMessage, out responseHeaders, out responseStream);
return srvProc;
}
Run Code Online (Sandbox Code Playgroud)
然后(当我从客户端收到请求时)只需从CallContext获取IP就像这样.
public string GetClientIP()
{
// Get the client IP …Run Code Online (Sandbox Code Playgroud) 如果我错了,请纠正我.有两种类型的IP - 一种是我们分配给LAN卡的静态(固定)IP地址,另一种是我们从服务提供商处收到的IP地址.
对于前者 为我的机器设置的IP地址是192.168.1.10,而ISP给出的IP地址是218.64.xx.xx. (您可以使用http://www.ip2location.com/查看此内容)
当我使用ASP.net时,我可以使用-HttpContext.Current.Request.UserHostAddress获取ISP提供的IP地址;
问题:现在,我在Windows Forms环境中工作,但无法获得ISP提供的IP,但我能够获得固定的IP.
有谁能够帮我?
谢谢你分享你的时间.