我的PC上连接了多个modem,已知每个modem获得的动态IP,为了使得不同的socket使用不同的modem进行通信,我将不同的socket.bind(每个modem对应的ip),再connect。但结果好像不如我想像的那样,无论socket绑定到哪个ip,都是通过第一个连接的modem来进行通信的(从windows右下角的两个小电脑那个状态看到的)。不知道是不是bind方法确实可以做到我希望的那样?

解决方案 »

  1.   

    在开发服务程序时,默认是在所有的 ip 监听(listen),如果只 bind 某个 ip ,则只在这个 ip 上监听。搂主说的是在 "connect",也就是说不是服务器,而是客户端,bind 在这里不适用。采用路由表,搂主可以让 "某些目的 ip" 使用某个 Modem,办法是使用
    C:>route
      

  2.   

    也就是说服务器端bind方法才有用,客户端bind方法没有任何实际作用吗?
    修改路由表的话如果每个modem,每个socket连接的服务器都是同一个,是不是也没有办法实现了?PS: "信誉分变化纪录"里只有一个faq的加分,别的都没有……
      

  3.   

    按照搂主的说法,我不知道搂主是不是要做类似负载均衡之类的程序。如果要用 java 的 socket 来实现的话,我个人认为是不好实现的。这类功能一般都是一个小设备来完成。如果一定要用软件来实现,按说使用 Windows 底层驱动接口来开发,应该是能做得到的,不过可能有点复杂。至于 route 的用法,可以参考 开始 -> 帮助和支持
      

  4.   

    一开始以为socket的bind可以绑定ip,也就同时指定了路由做到最后这一步才发现有问题。。之前的都等于白做了。。痛苦啊
      

  5.   

    搂主也不要着急。你可以再参考一下 msdn ,看看 connect 之前的 bind 究竟有什么用。
      

  6.   

    这句话是 msdn 上关于 .NET 中的 socket 的:注意   如果当前使用的是面向连接的协议,而且在调用 Connect 之前并没有调用 Bind,则基础服务提供程序将会分配本地网络地址和端口号。而如果当前使用的是无连接协议,则要等到发送或接收操作完成时,服务提供程序才会分配本地网络地址和端口号。如果要更改默认远程主机,则使用所需的终结点再次调用 Connect。就是说,connect 之前的 bind 这种操作是存在的,不过我没有用过。我只知道 listen 之前的 bind。搂主可以在再查询一下这方面的资料。