如何得到所在的网段在公网上的IP地址 我在局域网中的IP为 192.168.0.4 网关是192.168.0.1 但是我不知道这个局域网在公网中的地址 因为我需要和公网上的另一个主机通信 所以需要知道自己所在网段在公网的IP请问怎么得到? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try..HttpListenerRequest.UserHostAddress orHttpRequest.UserHostAddress 其实是这样的 我的主机只负责得到自己的网段的IP地址 并没有一个已经在公网的IP地址已知的主机可以协助我 用httpRequest需要和一个已知ip的主机通信才可以 vs2005的话可以试试IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());ipaddr=host.AddressList[0].ToString();如果不是host.AddressList[0].ToString();就试试host.AddressList[1].ToString();再不行就试试host.AddressList[2].ToString();到2估计就差不多可以得到结果了 创建一个WebService ReturnClientIP [WebMethod]public string GetClientIp(){ return HttpContext.Current.Request.UserHostAddress;}客户端调用这个WebService中的GetClientIp方法string url = "http://www.xxx.com/ReturnClientIP.asmx";string IpAddress = WebService.InvokeWebService(url,"GetClientIp",null).ToString();//动态调用WebServiceusing System;using System.IO;using System.Net;using System.Reflection;using System.CodeDom;using System.Diagnostics;using System.Web.Services;using System.Web.Services.Description;using System.CodeDom.Compiler;using Microsoft.CSharp;namespace GetClientIP{ /// <summary> /// WebService 的摘要说明。 /// </summary> public class WebService { public WebService() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 动态调用web服务 /// </summary> /// <param name="url">web服务地址</param> /// <param name="methodname">方法名</param> /// <returns></returns> public static object InvokeWebService(string url,string methodname) { return InvokeWebService(url,methodname,null) ; } /// <summary> /// 动态调用web服务 /// </summary> /// <param name="url">web服务地址</param> /// <param name="methodname">方法名</param> /// <param name="args">参数数组</param> /// <returns></returns> public static object InvokeWebService(string url,string methodname,object[] args) { return InvokeWebService(url ,null,methodname,args) ; } /// <summary> /// 动态调用web服务 /// </summary> /// <param name="url">web服务地址</param> /// <param name="classname">类名</param> /// <param name="methodname">方法名</param> /// <param name="args">参数数组</param> /// <returns></returns> public static object InvokeWebService(string url,string classname,string methodname,object[] args) { string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling" ; if((classname == null) ||(classname == "")) { classname = GetWsClassName(url) ; } try { //获取WSDL WebClient wc = new WebClient(); Stream stream = wc.OpenRead(url+"?WSDL"); ServiceDescription sd = ServiceDescription.Read(stream); ServiceDescriptionImporter sdi = new ServiceDescriptionImporter(); sdi.AddServiceDescription(sd,"",""); CodeNamespace cn = new CodeNamespace(@namespace); //生成客户端代理类代码 CodeCompileUnit ccu = new CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn ,ccu); CSharpCodeProvider csc = new CSharpCodeProvider(); ICodeCompiler icc = csc.CreateCompiler(); //设定编译参数 CompilerParameters cplist = new CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); //编译代理类 CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if(true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } //生成代理实例,并调用方法 System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace+"."+classname,true,true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); return mi.Invoke(obj,args); } catch(Exception ex) { throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace)); } } /// <summary> /// 获取类名 /// </summary> /// <param name="wsUrl">web服务地址</param> /// <returns></returns> private static string GetWsClassName(string wsUrl) { string[] parts = wsUrl.Split('/') ; string[] pps = parts[parts.Length-1].Split('.') ; return pps[0] ; } }} 我觉得一般情况下很难。外网上有一些网页可以测试wan口的ip的,试着去和这些网页通信,然后对获得页面分析,把ip地址提取出来 xiaotupansy(中) ( ) 信誉:100 Blog ///////////////////////////////////////说的方法肯定不对 这样只能得到1个IP地址 我用2005 TO:其实是这样的 我的主机只负责得到自己的网段的IP地址 并没有一个已经在公网的IP地址已知的主机可以协助我 用httpRequest需要和一个已知ip的主机通信才可以你不是和公网上的另一个主机进行通信吗?你自己知道你自己的IP地址有什么用?应该是在另一主机得到你的地址并加以利用吧... 我觉得还是得和web服务器进行通信...直接得到似乎不行...关注下.. 肯定要通过外部网站,或者是调用webservice 才行啊.你可以参考这个http://hi.baidu.com/jiangzhe/blog/item/e16fd83f8ba52fc27c1e717c.html 字符串匹配问题 WCF中IsInitiating的疑问 关于IEnumerator类型方法 C#里怎么和SQL SEVER里的DECIMAL类型对应 欢迎免费邮件订阅《CSDN社区电子杂志》!(请版主置顶) control的left width之类最大值是32767吧,怎么能表达比这个大的? VS2005中如何获取串口列表? ODBC连接问题 在DataGrid中怎样选中并删除数据??? 关于C#连接sql 的问题 制作WinForm的安装程序并在安装程序中执行SQL脚本代码时,关于安装路径中包含空格的问题 combobox怎么获得输入的值?
IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
ipaddr=host.AddressList[0].ToString();
如果不是host.AddressList[0].ToString();就试试host.AddressList[1].ToString();
再不行就试试host.AddressList[2].ToString();到2估计就差不多可以得到结果了
[WebMethod]
public string GetClientIp()
{
return HttpContext.Current.Request.UserHostAddress;
}
客户端调用这个WebService中的GetClientIp方法
string url = "http://www.xxx.com/ReturnClientIP.asmx";
string IpAddress = WebService.InvokeWebService(url,"GetClientIp",null).ToString();//动态调用WebService
using System;
using System.IO;
using System.Net;
using System.Reflection;
using System.CodeDom;
using System.Diagnostics;
using System.Web.Services;
using System.Web.Services.Description;
using System.CodeDom.Compiler;
using Microsoft.CSharp;namespace GetClientIP
{
/// <summary>
/// WebService 的摘要说明。
/// </summary>
public class WebService
{
public WebService()
{
//
// TODO: 在此处添加构造函数逻辑
//
} /// <summary>
/// 动态调用web服务
/// </summary>
/// <param name="url">web服务地址</param>
/// <param name="methodname">方法名</param>
/// <returns></returns>
public static object InvokeWebService(string url,string methodname)
{
return InvokeWebService(url,methodname,null) ;
} /// <summary>
/// 动态调用web服务
/// </summary>
/// <param name="url">web服务地址</param>
/// <param name="methodname">方法名</param>
/// <param name="args">参数数组</param>
/// <returns></returns>
public static object InvokeWebService(string url,string methodname,object[] args)
{
return InvokeWebService(url ,null,methodname,args) ;
} /// <summary>
/// 动态调用web服务
/// </summary>
/// <param name="url">web服务地址</param>
/// <param name="classname">类名</param>
/// <param name="methodname">方法名</param>
/// <param name="args">参数数组</param>
/// <returns></returns>
public static object InvokeWebService(string url,string classname,string methodname,object[] args)
{
string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling" ;
if((classname == null) ||(classname == ""))
{
classname = GetWsClassName(url) ;
} try
{
//获取WSDL
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url+"?WSDL");
ServiceDescription sd = ServiceDescription.Read(stream);
ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
sdi.AddServiceDescription(sd,"","");
CodeNamespace cn = new CodeNamespace(@namespace);
//生成客户端代理类代码
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn ,ccu);
CSharpCodeProvider csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler();
//设定编译参数
CompilerParameters cplist = new CompilerParameters();
cplist.GenerateExecutable = false;
cplist.GenerateInMemory = true;
cplist.ReferencedAssemblies.Add("System.dll");
cplist.ReferencedAssemblies.Add("System.XML.dll");
cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
cplist.ReferencedAssemblies.Add("System.Data.dll"); //编译代理类
CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
if(true == cr.Errors.HasErrors)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors)
{
sb.Append(ce.ToString());
sb.Append(System.Environment.NewLine);
}
throw new Exception(sb.ToString());
} //生成代理实例,并调用方法
System.Reflection.Assembly assembly = cr.CompiledAssembly;
Type t = assembly.GetType(@namespace+"."+classname,true,true);
object obj = Activator.CreateInstance(t);
System.Reflection.MethodInfo mi = t.GetMethod(methodname); return mi.Invoke(obj,args);
}
catch(Exception ex)
{
throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));
}
} /// <summary>
/// 获取类名
/// </summary>
/// <param name="wsUrl">web服务地址</param>
/// <returns></returns>
private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/') ;
string[] pps = parts[parts.Length-1].Split('.') ; return pps[0] ;
}
}
}
///////////////////////////////////////
说的方法肯定不对 这样只能得到1个IP地址 我用2005
http://hi.baidu.com/jiangzhe/blog/item/e16fd83f8ba52fc27c1e717c.html