日期:2014-05-18  浏览次数:20987 次

一个简单又复杂的问题
我做了一个winform系统     可是服务器在公司中的IP有时会变化   有没有可能在程序中写上在IP段中自动搜索服务器所在的IP并连接的代码     我不想在网络连接中绑定IP   谢谢

------解决方案--------------------
沙发
------解决方案--------------------
在.NET的公共运行时中有一个名字空间System.Net,它具备有一些类使得网络编程易如反掌。其中有一个类叫Dns,使用其静态方法可以获取主机名和IP地址。下面是代码实现细节:
将下面的代码保存为 getip2.cs ,并按照下面所将的方法编译生成.exe文件。
////////////////////////////////////////////////////////////////////
// getip2.cs
//
// 本程序报告本机上每一块网卡的IP地址
// 命令行编译命令为:
// csc getip2.cs

// 请一定要在VS 7和.NET的环境变量中正确指定LIB库的路径;可以运行
// vsvars32.bat
//
using System;
using System.Net; // network stuff
using System.Collections; // array iterator

//////////////////
// standard C# application class
//
class MainApp {

// 应用程序入口点
public static void Main() {

// 显示主机名
string hostname = Dns.GetHostName();
Console.WriteLine( "hostname = {0} ", hostname);

// 显示每个IP地址
IPHostEntry hostent = Dns.GetHostByName(hostname); // 主机信息
Array addrs = hostent.AddressList; // IP地址数组
IEnumerator it = addrs.GetEnumerator(); // 迭代器
while(it.MoveNext()) { // 循环到下一个IP 地址
IPAddress ip = (IPAddress)it.Current; // 获得 IP 地址
Console.WriteLine( "Address: {0} ", ip); // 显示 IP地址
}
}
};
//.NET 类隐藏了初始化和终止,隐藏了别扭的hostent 结构,在数组中打包地址并不用你去操心IP地址的格式化问题。getip2 仅用了19 行C#代码,而相应的C/C+代码有50多行。在程序的简短方面,C#明显更胜一筹,只不过在第一次运行getip2时,加载.NET所耗费的时间有点不尽人意
------解决方案--------------------
lz可知道DNS?可知道DDNS?如果不知道就google一下...