开发人员经常会碰到老板或上头安排的项目或需求,是自己完全陌生的领域,这个时候就会非常头痛,搜索引擎能解决大部分这些方面的问题,而有时因为自身问题或干脆找不到解决方案而非常抓狂......虽然干开发有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. Linux 查看进程运行的完整路径方法

    通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等. 这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系统会在/proc下创建一 ...

  2. el表达式用==和eq的注意事项

    eq和==一般是一样的,但是注意el表达式中使用==判断的时候不允许有空格,例如: ${job.jobName==requestScope.user.job.jobName?"selecte ...

  3. dts的pci模块中bus-range和ranges

    bus-range = <2 3>;       该设备(一般为RC)下的pci总线号范围 ranges = <0x2000000 0x0 0xc0000000 0 0xc00000 ...

  4. 如何将MP3录音转文字

    相信很多人都有电话录音的习惯,因为这样可以记录下很多重要的信息.那么当我们通过录音将一些重要的信息记录下来后,我们应该怎样将这些录音文件转换成文字进行记录呢?下面我们就一起来看一下吧. 操作步骤: 步 ...

  5. Arcengine 在SDE创建数据集提示应用程序未获得创建或修改此类型数据的方案的许可

    解决方案:将license Control的属性修改一下,ArcGIS Engine的√去掉,把第二个打√就可以了: 参考资料:http://www.docin.com/p-925448534.htm ...

  6. Abhyankar's Conjecture

    http://www.math.purdue.edu/about/purview/spring95/conjecture.html A Layman's Perspective of Abhyanka ...

  7. 用CMD命令进行关机/重启

    用CMD命令进行关机/重启 - WingsBlog https://www.wusiwei.com/post-185.html [实用]CMD关机.重启命令 - Kevin.Chen - 专注前行 - ...

  8. [knowledge] 停止等待协议

    再读TCP/IP详解 说到流量控制, 可能便涉及了两方面 1. 停止等待协议. https://baike.baidu.com/item/%E5%81%9C%E6%AD%A2%E7%AD%89%E5% ...

  9. PHP 小知识

    -- 获取/设置响应的 HTTP 状态码 mixed http_response_code ([ int $response_code ] ) -- ... 操作符知道是什么么?看看 PHP 官方的 ...

  10. ATL Thunk机制深入分析

    如果你有SDK的编程经验,就一定应该知道在创建窗口时需要指定窗口类,窗口类中的一种重要的参数就是窗口过程.任何窗口接收到的消息,都是由该窗口过程来处理. 在面向对象编程中,如果还需要开发人员来使用原始 ...