因为做项目的原因,C/S架构中要进行消息传递,以前做的时侯,服务器和客户端都是在一台电脑上,不涉及IP地址的问题,但是产品要发布,此时必须先知道对方的IP地址。
我采用的是本机获取自己的ip地址后,写入数据库,当需要传递消息时,从数据库中读出要传递的服务器或客户端的IP地址,然后将消息传递过去。
第一步,获取本机的IP地址:
如果是通过共享上网,通过NAT转换的,本机是不知道上网出口网关的IP地址的。
我程序里最终是通过,向网外发送一条信息,由对方告知你的出口IP地址,这个很容易实现,你可以自己写个程序放服务器上,也可以调别人的。
GetHostByName ( )方法的返回值时IPHostEntry 对象,此对象的属性 AddressList,是一个IPAddress类型的数组,包含了计算机此时的所有的IP地址信息。在ip01.cs中AddressList [0].Address是固定的IP地址,而对于上网动态分配的IP地址是.AddressList [1].Address。据此我们可以的得到读取拨号上网动态分配的IP地址的源程序:
System.Net.IPAddress addr;// 获得拨号动态分配IP地址addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [1].Address ) ;return addr.ToString ( ) ;
我们也可以通过设定AddressList的不同值来得到机器不同的IP地址。
// 通过外部网站返回得到内网外部IP
// 来源: http://www.cnblogs.com/helloworld84/archive/2005/08/18/218104.html
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
class PubIP
{
static string GetIP()
{
Uri uri = new Uri("http://www.ikaka.com/ip/index.asp");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = 0;
req.CookieContainer = new CookieContainer();
req.GetRequestStream().Write(new byte [0], 0, 0);
HttpWebResponse res = (HttpWebResponse)(req.GetResponse());
StreamReader rs = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("GB18030"));
string s = rs.ReadToEnd();
rs.Close();
req.Abort();
res.Close();
Match m = Regex.Match(s, @"IP:/[(?<IP>[0-9/.]*)/]");
if (m.Success) return m.Groups["IP"].Value;
return string.Empty;
}
static void Main()
{
Console.WriteLine(GetIP());
}
}
同时,我们也可以获取局域网中本机的IP地址:
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
classHostIP
{
static void Host() //局域网中获取主机地址
{
string ComputerName = Dns.GetHostName();
IPHostEntry myHost = new IPHostEntry();
myHost = Dns.GetHostEntry(ComputerName);
for(int i = 0;i < myHost.AddressList.Length;i++)
{
Console.WriteLine("{0}",myHost.AddressList[i].ToString());
}
}
static void Main()
{
Host();
Console.ReadLine();
}
}
参考网站:http://topic.csdn.net/t/20050927/13/4296901.html
分享到:
相关推荐
C#编程方法:获取本机主机名和IP地址C#编程方法:获取本机主机名和IP地址
c#写的OPC Client源码,VS2005工程文件,是完整的项目文件,不是网页版。 ///摘要 ///程式使用C#.NET 2005 编写 ///引用类库OPCDAAuto.dll ///OPCServer采用KEPWare ///在windows xp sp2、sp3、windows 2003上测试...
C# winform 获取 本机 IP C# winform 获取 本机 IP
c#实现的获取本机IP地址的程序,值得下载,呵呵
1、获取本机的IP地址集合: /// /// 获取本机所有ip地址 /// </summary> /// <param name=netType>InterNetwork:ipv4地址,InterNetworkV6:ipv6地址</param> /// <returns>ip地址集合</returns> public ...
C# C/S结构入门小项目,适合有一点.net c#基础的人学习
C#实现获取多网卡IP地址方法,该方法可以遍历出所有网卡的IP地址。
C#通过IP地址获取主机名称
本例是使用C#获取本机网卡(有线&无线)IP的DEMO,适用于单个网卡对应多个IP的情况。
c#b/s通用功能权限管理系统,带源码,有问题直接联系本人
c# 中c/s模式利用服务器控制客户机关机
用C#建立的一个C/S的应用,先在C:下建立文件夹Pictures,在里面放上几幅图片文件,运行服务器,然后运行客户端,就能从客户端上取到服务器上的图片,并且在客户端显示出图片。
用C#实现C/S模式下软件自动在线升级,利用XML.
c#tcp/ip练习源码 c#tcp/ip练习源码 c#tcp/ip练习源码 c#tcp/ip练习源码
利用C#开发的基于C/S架构的考试系统,采用了多线程技术,利用socket实现的TCP/IP协议,数据库采用的sql sever 2000.
获取本机IP 设置本机IP配置为自动获取或者手动设置 测试端口是否可访问 Ping IP 功能实现通过用Socket类、Process类、来调用命令行程序测试和Socket访问端口。 温习知识写的小工具,如果有bug,那么理解万岁
C#编写获取本机IP地址及主机名称,附有代码,仅供学习和参考
用C#写的简单的TCP/IP通信小示例,开发环境为VS2013,里面有一个服务端和一个客户端,适合新手看看
程序启动时首先获取本机的IP和MAC地址; 然后获取局域网内所有计算机的IP地址; 输入IP地址回车,获取该IP的MAC地址; 输入“STARTSCAN”回车,重新获取局域网内所有计算机的IP地址; 输入“ALLSCAN”回车,获取...
C/S模式的TCP聊天室程序 本程序用C#实现,代码附带注释 客户端同时也是服务器 用于局域网内各台机器间通信 提醒:本程序为点对点通信,不是聊天室,还望加以区分 (俺不能为了分而模糊俺的东东。。)