开发人员经常会碰到老板或上头安排的项目或需求,是自己完全陌生的领域,这个时候就会非常头痛,搜索引擎能解决大部分这些方面的问题,而有时因为自身问题或干脆找不到解决方案而非常抓狂......虽然干开发有10来年了,但还是会不时碰到这种问题,现做一下总结

  前段时间老板出了一个难题给我,具体要求如下:

  服务器上面有两张网卡分别连接电信和联通网络,要求软件在接到A请求时,使用电信网卡访问网络,接到B请求时,使用联通网卡访问网络,必须能多线程处理请求。还给了提示,说他听他朋友讲,使用路由功能就可以简单实现了


  解决办法一:有问题上度娘,找谷哥


  拿到问题后,第一时间先认真分析需求,看看它会涉及几个技术点,那些自己熟悉的能搞定的,那些是陌生需要寻求帮助的

  上面需求看起来很简单而且又给出了提示,简单分析了一下,可能会涉及到的技术点有:网络访问、访问需要绑定网卡(MAC)、负载均衡、多线程、可能涉及路由等技术。心想使用度娘应该很快可以找出答案了,说干就干,在度娘那里输入:“c# winform 绑定网卡 ”、“c# HttpWebRequest绑定网卡”、“c#绑定MAC”、“c# 自动选择网卡”、“C# winform多网卡下设置指定网卡网关”、“C# Winform tcp/ip 通讯”、“c# route”、“c# route 切换路由”、“c# MAC网卡 负载均衡”、“多网卡绑定 负载均衡”、“c# 路由”、“c# 路由编程”......

  找了半天,只找到一些不是很靠谱的解决办法,比如使用CMD命令修改路由器的跃点来处理,但是改了后都走跃点低的那个网卡了,不能同时处理多个请求,只能中断一个个处理,并没有达到想要的目的。

  其他解决方法就是找不到......


  解决办法二:查技术文档


  当第一种方法不行时,那只能查看帮助文档、开发语言相关的技术资料

  

  由于使用的开发语言是用C#开发的,所以按老板的提示,拼命的查找路由相关的资料(被导入了误区了... T_T)

  除了找到修改路由器的跃点方法外,没有查到其他办法


  解决办法三:要多使用团队的力量


  个人解决不了的时候,这时就要动用关系,问问身边的同事、朋友或技术Q群等,看有没有好的解决方案,很多时候我们都是缺少一个好的切入点,大家讨论一下,通常灵感就来了,或者有的朋友提出了一些好的想法或提示,按着这个思路设置关键字去查询或查看相关资料,难题再也不是问题。所以一般来说(除非特殊的技术难题),这种方法都能解决问题,以前很多技术难题,都是同事朋友帮忙一起解决的,效率特别高。

  以上办法解决不了后,只能向同事、朋友、技术Q群等地方,广播出自己的难题,广撒网,看看能不能碰到会的朋友,提示给予一个提示。不过发出这么多询问后,得到的答复都是没接触过这方面的技术......@_@......能问的地方都问了,还是没有解决办法


  解决办法四:思考以上解决思路是否误入歧途了,寻找新的切入点


  当没有清晰的解决思路时,不妨放下当前问题,先去做其他事情,缓一缓后再重新处理。因为当思路误入歧途,就老是在那个圈圈里面转着,很难跳出来,而缓一缓后,头脑清晰了,就会产生更多新的想法,再慢慢逐个尝试。以前试过碰到很多其他技术问题解决不了时,使用本方法轻松的找到之前被自己忽略的地方,从而找到问题关键点所在,解决了问题

  在这个时候,已经研究了三四天时间了,一点解决思路都没有,心里很急燥,不过只能先强迫自己冷静下来进行认真检讨,从新理顺一下思路:本需求是否可以实现(按BOSS的说法,这是肯定可以做到的,不过从技术角度分析,实现肯定没有问题,就是要找对API才行)?本需求所使用的技术,肯定只要是网络访问、访问需要绑定网卡(MAC)、负载均衡等方面,而查询的关键字应该有问题,查找的资料也存在问题。除了使用C#调用API外,是否考虑使用C++编写插件来给C#调用?......

  最后又花了一天多时间来查询各方面的资料,还是没有办法(主要还是对该领域太陌生了,网上也没有查找到对应的解决办法),那只能使用最后一招绝杀技了......


  解决办法五:寻找大牛来帮忙解决


  IT技术无穷无尽,每个人都有自己最擅长的地方,所以自己处理不了一些问题也是很正常的事情,而专业的事情要交给专业的人来处理,所以必杀技就是到各大技术论坛寻找牛人来帮忙,比如上技术论坛、博客网站等地方发贴寻求帮助

  本问题已经到了最后山穷水尽的时候,本想在各技术论坛发贴询问的,但想想自己没有太多时间刷贴,所以厚着脸皮找一些大牛的博客,看他们那些对这一块比较熟悉,然后直接发邮件或直接留言给他们,请求他们帮忙。

  具体的解决方法如下:(在多网卡的环境下,只要在访问外网时,指定使用那一个网卡IP来对外发包,就可以非常简单的实现一开始所说的功能了)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//设置对外访问所使用网卡的IP
string sendingIp = "192.168.0.1";
//设置对外访问所使用的端口
int sendingPort = 5000;
Uri uri = new Uri("http://google.com");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(uri);
//获取对外访问的包,并指定使用那个IP(网卡)与端口来发送数据包
ServicePoint sp = ServicePointManager.FindServicePoint(uri);
sp.BindIPEndPointDelegate =
    (servicePoint,remoteEp,retryCount) =>
         {
             return new IPEndPoint(IPAddress.Parse(sendingIp),sendingPort);
         };
//提交请求并获取返回结果
var data = new StreamReader(wr.GetResponse().GetResponseStream()).ReadToEnd();

  总结


  对于初学者来说,会经常碰到各种各样的需求和问题,但并不是每一个人都能很幸运身边有一位大牛,可以随时帮忙解决各种问题,所以大多数还是要考自己来解决,这就需要使用相关的技巧。运用好的技巧可以让自己少走弯路,节省时间成本。另外过多的依赖别人,也会压缩自己的成长空间,而且大牛们也会非常的烦初学者自己都没有认真研究就随便乱提问题(多数提出的都是一些很初级的问题)。

BindIPEndPointDelegate的更多相关文章

  1. 求关注 wcf bindipendpointdelegate 端口限制的功能

    我最近也需要实现一个功能:1)一个客户端(192.168.0.15),10个服务端(提供A接口.B接口)如下:      192.168.0.1-5685       192.168.0.2-5685 ...

  2. HttpHelper

    /// <summary> /// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 /// 重要提 ...

  3. 一个服务器上面配置多个IP ,实现指定IP的域名请求

    //配置多个IP命名using System.Net; //********************************************************************** ...

  4. C# 网卡IP(网上资料整理)

    //设置对外访问所使用网卡的IP string sendingIp = "192.168.0.1"; //设置对外访问所使用的端口 ; Uri uri = new Uri(&quo ...

  5. HttpWebRequest类,及如何使用Cookie(转载)

    HttpWebRequest类与HttpRequest类的区别.HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息.而HttpWebReques ...

  6. 如何让HttpWebRequest使用指定网络接口传输数据

    using System; using System.Net; class Program { public static void Main () { foreach (var ip in Dns. ...

  7. C# 使用WebClient时,在多网卡时,指定IP发送Web请求

    需要定义一个类,重写GetWebRequest,在方法内,指定IP地址 public class MyWebClient : WebClient { private IPAddress ipAddre ...

  8. 关于http请求指定本地ip

    static void Main(string[] args) { //ssl证书验证问题(没有校验) ServicePointManager.ServerCertificateValidationC ...

  9. 爬虫 HttpHelper

    /// <summary> /// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 /// 重要提 ...

随机推荐

  1. 3、CSS属性组成和作用

    3:CSS属性组成和作用 学习目标 1.css属性和属性值的定义 2.css文本属性 3.css列表属性 4.css背景属性 5.css边框属性 6.css浮动属性 一.css属性和属性值的定义 属性 ...

  2. Docker多主机网络

    网络术语概念 二层交换技术:工作在OSI七层网络模型的第二层,通过MAC地址进行帧转发 三层交换技术:也称为IP交换技术,工作在OSI七层网络模型的第三层,通过IP地址进行包转发.它解决了局域网中网段 ...

  3. 今天看到的一些js的用法

    以下是今天学习到的一些js语法,特整理出来. 1.  (10)["toString"]() === "10" // true 2.如何优雅的取整 var a = ...

  4. F#周报2018年第49期

    新闻 ML.NET 0.8--Machine Learning for .NET .NET Core 3预览 1以及开源Windows桌面框架 .NET Core 2.2 尝试C# 8.0 .NET ...

  5. apache中端口与目录的关系

    apache中,如果设置了监听了端口而没有配置对应的虚拟目录,则访问时会指向<Directory >节所指向的目录.

  6. [No000012A]WPF(2/7):布局,容器和布局转换[译]

    概要 在上一篇文章中,我讨论了一些WPF应用的基础知识,它们是使用WPF的基本架构和内部结构.在本文中,我将讨论编写你的第一个WPF程序的基本的东西和怎么在你的窗口中布局控件.这是每一个想使用WPF的 ...

  7. linux中使用ps -ef

    常操作linux系统的都会用到:ps -ef 命令,是一个非常强大的进程查看命令. 在训练模型中使用python,那么我会要看这个python相关的进程,可以使用如下命令”: ps -ef | fgr ...

  8. mail 发送email

    (一)首先安装ssmpt和mailutils: sudo apt-get install ssmtp mailutils (二)接下来编辑配置文件sudo gedit /etc/ssmtp/ssmtp ...

  9. influxdb服务器 relay

    https://www.influxdata.com/time-series-platform/influxdb/ https://www.xusheng.org/blog/2016/07/30/pe ...

  10. Flash and Scalform CLIK

    Flash shift + f7 打开组件检查面板 Scaleform As bit define bool                Unrolling       :1;    // indi ...