现在碰到一个刺手的问题,是这样的!
我的客户端要通过socket与服务器端进行通信,可是客户端服务器上是双ip地址(比方是192.168.1.10和192.168.1.20),可是服务器端只允许192.168.1.20进行通信,进行了ip限制,在客户端上192.168.1.10是主ip,192.168.1.20是从ip,如果我简单通过socket建立连接,程序默认会以192.168.1.10进行通信,这样服务器端会拒绝,我应该如果写才能够解决这个问题呢?不好手动,要用程序自动实现方便的话给个代码吧!谢谢!

解决方案 »

  1.   

    1.3 设定客户端的地址      在一个Socket 对象中, 即包含远程服务器的IP 地址和端口信息, 也包含本地客户端的IP 地址和端口信息. 默认情况下, 客户端的IP 地址来自于客户程序所在的主机, 客户端的端口则由操作系统随机分配. Socket类还有两个构造方法允许显式地设置客户端的IP 地址和端口:  //参数localAddr 和 localPort 用来设置客户端的IP 地址和端口
      Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
      Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException     如果一个主机同时属于两个以上的网络, 它就可能拥有两个以上的IP 地址. 例如, 一个主机在Internet 网络中的IP 地址为 "222.67.1.34", 在一个局域网中的IP 地址为 "112.5.4.3". 假定这个主机上的客户程序希望和同一个局域网的一个服务器程序(地址为:"112.5.4.45: 8000")通信, 客户端可按照如下方式构造Socket 对象:        InetAddress remoteAddr1 = InetAddress.getByName("112.5.4.45");
      InetAddress localAddr1 = InetAddress.getByName("112.5.4.3");
      Socket socket1 = new Socket(remoteAddr1, 8000, localAddr1, 2345);   //客户端使用端口2345
    =========================================
    哪位网友帮忙下把上面两段java的源码译成C#的。多谢了
      

  2.   

    socket.bind后再socket.connect会有异常。这是怎么回事呀
      

  3.   

    定义远端IP可以吗?IPEndPoint MyRemotePoint = new IPEndPoint(IPAddress.Parse(MyIP),MyPort)
      

  4.   


    远端ip可以的呀。只是本地电脑在多个网络中,不知道如何实现通过基中的某个ip访问远端服务器了
      

  5.   


    什么异常,具体代码如何?实际操作就是那样的,先调用Socket.Bind(EndPoint localEP)方法,然后调用Socket.Connect(EndPoint remoteEP),从参数名你应该可以看得出来,Bind是绑定了本地IP信息,而Connect是绑定了远程IP信息。
      

  6.   


    System.Net.Sockets.SocketException: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 这个错误呀。看来真不能绑定了
      

  7.   

    System.Net.Sockets.SocketException: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 这个错误呀。看来真不能绑定了
    这个异常是是不是无法解决呀?
      

  8.   

    Bind是本地端口
    Connect远程端口是可以绑定的。
      

  9.   

    重用?你为什么要重用端口,根本不需要的。一个Socket只绑定一次,一个端口也只给一个Socket使用,这种情况是不可能需要重用的。你肯定是什么对一个Socket多次调用Bind或者创建了多个Socket才会这样。
      

  10.   

    重用Socket先绑定本地Socket端口(IPEndPoint)
    然后新建另一个Socket,重用刚才的Socket
    然后连接即可。
      

  11.   


    你好。我就是这样做的呀。可还是报错呀。
    在连接前bind呢 
      

  12.   

    因为是进行http操作。如果不重用会出现好多time_wait之类的半连接,端口几乎全占了。程序效率好差的
      

  13.   

    SetSocketOption里面有可以设置重用端口。
      

  14.   

      Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    //在上面这行下面添加
    socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);你好。加了这行还是一样报错的呢