最近协助一个项目解决了一个获取IP地址的问题,手机客户端与WebService进行通讯,然后WebService通过TCP通讯把指令传递到另一台PC机上。在测试的过程中,总是会出现WebService服务器和PC机通讯失败的问题,但是用TCP调试工具进行通讯调试这两台机器是可以进行通讯的,进行调试好了之后,换了另外的网络环境又通讯不了。最后拿到了代码,排查出来是IP地址获取的问题。

原始代码获取IP地址是通过Dns.GetHostAddresses(Dns.GetHostName())进行获取IP地址数组,然后再数组中获取IP地址的:

原来写的代码获取的是数组中的第三个值,在其中写死,在测试环境上就已经测试通过,但是换了客户环境通讯又失败,无奈用Fildder进行排查,通讯的地址有问题,就排查到IP地址获取错误,通过网上查找资料,获取IP地址换成:

 public static IPAddress localip = Dns.GetHostAddresses(Dns.GetHostName())
.Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
.First();

Dns.GetHostAddresses(Dns.GetHostName())中获取IP地址为IPV4、IPV6,多块网卡(包括虚拟网卡)的地址,网络环境不同,获取的数据就不一样,导致获取本机IP地址出现错误。

在对IP地址进行筛选

 Dns.GetHostAddresses(MachineName)
.Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
.First()

是筛选ip v4 。

 Dns.GetHostAddresses(MachineName)
.Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
.First()

是筛选V6的ip地址。

C#之获取本地IP地址的更多相关文章

  1. 获取本地IP地址信息

    2012-06-05    /// <summary>         /// 获取本地IP地址信息         /// </summary>         void G ...

  2. C# — 动态获取本地IP地址及可用端口

    1.在VS中动态获取本地IP地址,代码如下: 2.获取本机的可用端口以及已使用的端口:

  3. .net获取本地ip地址

    整理代码,.net获取本地ip地址,代码如下: string name = Dns.GetHostName(); IPHostEntry IpEntry = Dns.GetHostEntry(name ...

  4. 获取本地IP地址的vc代码

    作者:朱金灿 来源:http://blog.csdn.net/clever101 获取本地IP地址有两种做法.一种是使用gethostname函数,代码如下: bool CSocketComm::Ge ...

  5. Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip

    获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...

  6. 获取本地ip地址 C#

    与ipconfig获取的所有信息一致的方法: private void GetIp() { System.Diagnostics.Process cmdp= new System.Diagnostic ...

  7. Linux下编程获取本地IP地址的常见方法

    转载于:http://blog.csdn.net/k346k346/article/details/48231933 在进行linux网络编程时,经常用到本机IP地址.本文罗列一下常见方法,以备不时之 ...

  8. .net core获取本地Ip地址的方法

    笔记: /// <summary> /// 获取本地Ip地址 /// </summary> /// <returns></returns> public ...

  9. Java获取本地IP地址

    import java.net.InetAddress; import java.net.UnknownHostException; public class IpTest { public stat ...

  10. python获取本地ip地址的方法

    #_*_coding:utf8_*_ #以下两种方法可以在ubuntu下或者windows下获得本地的IP地址 import socket # 方法一 localIP = socket.gethost ...

随机推荐

  1. js拖动层

    模仿网易彩票网(http://caipiao.163.com/)的登陆框自己做了一个拖动层,不过有点小问题——在谷歌浏览拖动的时候鼠标状态变成了文字状态(cursor:text;) <!DOCT ...

  2. xml2js

    实际做项目的时候会有很多的XML配置文件,有些XML多达上千行,比如物品,武将的配置,一般的手游项目是直接解析XML文件,这就引发2个问题. 1.XML是明文,代码中解析必要要做加密. 2.有些配置过 ...

  3. AngularJS指令的作用域

    参考文章:https://segmentfault.com/a/1190000002773689

  4. PHP根据概率产生随机数

    假设 有四个选项:a 占 10%,b占20% ,C占30% , d 占 40% ,原理就是现获取随机数,然后找区间.当然了,选项的数量可以任意.目前默认是 总和是 100% .如果需要别的数,修改 随 ...

  5. Webpack: 为Web开发而生的模块管理器[转]

    Webpack: 为Web开发而生的模块管理器 原文地址:http://hanjianwei.com/2014/09/10/webpack-package-manager-for-web/ 10 Se ...

  6. A*八数码

    帮同学写的八数码,启发式搜索 创建两个表open,close,分别用的stl中的优先队列priority_queue和map,好久没写过代码了,bug调了半天 #include <iostrea ...

  7. WCF-基本知识

    WCF-基本知识 (1)WCF服务元数据交换方式介绍: WCF服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据:另一种则为MEX终结点元数据交换方式,和WCF服务一样使用一 ...

  8. codeforces Ilya and Matrix

    http://codeforces.com/contest/313/problem/C #include <cstdio> #include <cstring> #includ ...

  9. Altium Designer规则

    1.PCB规则 是PCB设计中至关重要的一个环节:保证PCB符合电气要求.机械加工(精度)要求:为自动布局.布线和部分手动布局.布线操作提供依据 为规则检查提供依据,PCB编辑期间,AD会实时地进行一 ...

  10. Manage Spring Boot Logs with Elasticsearch, Logstash and Kibana

    下载地址:https://www.elastic.co/downloads When time comes to deploy a new project, one often overlooked ...