欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Socket不能选择本地IP连接问题如何解决

程序员文章站 2023-11-21 11:07:40
现在碰到一个刺手的问题,是这样的! 我的客户端要通过socket与服务器端进行通信,可是客户端服务器上是双ip地址(比方是192.168.1.10和192.168.1.20...
现在碰到一个刺手的问题,是这样的!
我的客户端要通过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
方便的话给个代码吧!谢谢!
复制代码 代码如下:

code highlighting produced by actipro codehighlighter (freeware)http://www.codehighlighter.com/--> 1 string serverip = "59.39.71.94";
int serverprot = 80;
string clientip = "192.168.1.104";
int clientprot = 8012;
var socket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);
var iphostentry = dns.gethostentry(serverip);
var ipendpoint = new ipendpoint(iphostentry.addresslist[0], serverprot);
var address = ipaddress.parse(clientip);
if (address != null)
{
var localep = new ipendpoint(address, clientprot);
socket.bind(localep);
}
socket.connect(ipendpoint); //建立长连接

以上代码就可以完全实现上面的功能。