黑马程序员技术交流社区
标题:
socket中IPAddress用法求解释
[打印本页]
作者:
赵宗荣
时间:
2013-7-10 10:34
标题:
socket中IPAddress用法求解释
哪位大神能够解释一下socket中IPAddress的用法?
IPAddress address = IPAddress.Parse(txt_IP.Text.Trim());
作者:
baoshouying
时间:
2013-7-10 10:48
建立与远程主机的连接。主机由 IP 地址和端口号指定
IPAddress ip = IPAddress.Parse(txt);//可用来获得ip地址,(txt中的内容类型例如“127.0.0.1”)
IPAddress 中包含计算机的IP地址。Parse用于将 IP 地址字符串转换为 IPAddress ,例如IPAddress myIP = IPAddress.Parse("127.0.0.1");
现在只是知道这些
同候最佳答案{:soso_e113:}
作者:
changweihua
时间:
2013-7-10 10:51
还有啥用,除了表示这个对象
作者:
聂广强
时间:
2013-7-10 12:10
IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());//这个IPHostEntry类是为主机地址提供容器类 不可能所有的ip都是要自己手写进去通过Dns.GetHostName() 去获取计算机名 然后再通过Dns.GetHostEntry();自动通过里面所传的参数见IP地址解析为IPHostEntry的实例
IPAddress ip = hostEntry.AddressList[1];//一台机子为什么会有不同的ip地址,就是因为电脑有不同的网卡,若是开了无线网也可以获取更多的ip地址,那我们本机的ip地址就是自动获取的得到的,也就是说ip不再是127.0.0.1了而是其他的了,那么IPAddressde 的用法也就明了了
复制代码
作者:
zhangcheng5468
时间:
2013-7-10 13:23
public static IPAddress Parse(string ipString)这个是IPAddress类的一个静态方法,可以将 IP 地址字符串转换为 System.Net.IPAddress 实例。
// 参数:
// ipString:
// 包含 IP 地址(IPv4 使用以点分隔的四部分表示法,IPv6 使用冒号十六进制表示法)的字符串。
//
// 返回结果:
// 一个 System.Net.IPAddress 实例。它内部是这样的
public static IPAddress Parse(string ipString)
{
return InternalParse(ipString, false);
}
复制代码
最终是调用.NET内部封转的方法,方法内容如下:
private static unsafe IPAddress InternalParse(string ipString, bool tryParse)
{
long num7;
if (ipString == null)
{
if (!tryParse)
{
throw new ArgumentNullException("ipString");
}
return null;
}
if (ipString.IndexOf(':') != -1)
{
SocketException innerException = null;
if (Socket.OSSupportsIPv6)
{
byte[] buffer = new byte[0x10];
SocketAddress address = new SocketAddress(AddressFamily.InterNetworkV6, 0x1c);
if (UnsafeNclNativeMethods.OSSOCK.WSAStringToAddress(ipString, AddressFamily.InterNetworkV6, IntPtr.Zero, address.m_Buffer, ref address.m_Size) == SocketError.Success)
{
for (int i = 0; i < 0x10; i++)
{
buffer[i] = address[i + 8];
}
return new IPAddress(buffer, (((address[0x1b] << 0x18) + (address[0x1a] << 0x10)) + (address[0x19] << 8)) + address[0x18]);
}
if (tryParse)
{
return null;
}
innerException = new SocketException();
}
else
{
int start = 0;
if (ipString[0] != '[')
{
ipString = ipString + ']';
}
else
{
start = 1;
}
int end = ipString.Length;
fixed (char* str2 = ((char*) ipString))
{
char* name = str2;
if (IPv6AddressHelper.IsValidStrict(name, start, ref end) || (end != ipString.Length))
{
uint num5;
ushort[] numArray = new ushort[8];
string scopeId = null;
fixed (ushort* numRef = numArray)
{
IPv6AddressHelper.Parse(ipString, numRef, 0, ref scopeId);
}
if ((scopeId == null) || (scopeId.Length == 0))
{
return new IPAddress(numArray, 0);
}
if (uint.TryParse(scopeId.Substring(1), NumberStyles.None, null, out num5))
{
return new IPAddress(numArray, num5);
}
}
}
if (tryParse)
{
return null;
}
innerException = new SocketException(SocketError.InvalidArgument);
}
throw new FormatException(SR.GetString("dns_bad_ip_address"), innerException);
}
Socket.InitializeSockets();
int length = ipString.Length;
fixed (char* str3 = ((char*) ipString))
{
char* chPtr2 = str3;
num7 = IPv4AddressHelper.ParseNonCanonical(chPtr2, 0, ref length, true);
}
if ((num7 == -1L) || (length != ipString.Length))
{
if (!tryParse)
{
throw new FormatException(SR.GetString("dns_bad_ip_address"));
}
return null;
}
return new IPAddress(((num7 & 0xffL) << 0x18) | (((num7 & 0xff00L) << 8) | (((num7 & 0xff0000L) >> 8) | ((long) ((num7 & 0xff000000L) >> 0x18)))));
}
复制代码
一般开发中我们不需要知道.NETFrameWork的内部工作原理,微软为我们封转好了,我们直接在此基础上编程调用即可,这也是面向对象的好处!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2