我的客户端要通过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进行通信,这样服务器端会拒绝,我应该如果写才能够解决这个问题呢?
不要手动,要用程序自动实现 ,可以绑定本地的任何IP地址。
如本机IP地址为:
192.168.1.205,192.168.1.204,192.168.1.203
实现结果为:
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.205:2302 59.39.71.94:80 ESTABLISHED
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.203:12302 59.39.71.94:80 ESTABLISHED
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.204:7802 59.39.71.94:80 ESTABLISHED
方便的话给个代码吧!谢谢!
1
string
serverIp
=
"
59.39.71.94
"
;
2 int serverProt = 80 ;
3 string clientIp = " 192.168.1.104 " ;
4 int clientProt = 8012 ;
5
6 var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
7 var ipHostEntry = Dns.GetHostEntry(serverIp);
8 var ipEndPoint = new IPEndPoint(ipHostEntry.AddressList[ 0 ], serverProt);
9 var address = IPAddress.Parse(clientIp);
10 if (address != null )
11 {
12 var localEp = new IPEndPoint(address, clientProt);
13 socket.Bind(localEp);
14 }
15 socket.Connect(ipEndPoint); // 建立长连接
2 int serverProt = 80 ;
3 string clientIp = " 192.168.1.104 " ;
4 int clientProt = 8012 ;
5
6 var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
7 var ipHostEntry = Dns.GetHostEntry(serverIp);
8 var ipEndPoint = new IPEndPoint(ipHostEntry.AddressList[ 0 ], serverProt);
9 var address = IPAddress.Parse(clientIp);
10 if (address != null )
11 {
12 var localEp = new IPEndPoint(address, clientProt);
13 socket.Bind(localEp);
14 }
15 socket.Connect(ipEndPoint); // 建立长连接
以上代码就可以完全实现上面的功能。