双线的服务器如何玩监听?

.Net技术 码拜 6年前 (2015-05-10) 264次浏览 0个评论
 

很久以前在阿里云弄了一个服务器 自己写了一个exe(TcpListener)监听了一端口(9999)暂叫服务A

客户端(硬件或者自己写的tcpclient测试)就访问阿里云的IP直接发送数组

代码如下

            TcpClient c = new TcpClient();
            c.Connect(IPAddress.Parse("服务器IP"), 9999);
            c.Client.Send(数组);
            c.Client.Shutdown(SocketShutdown.Both);
            c.Client.Close();
            c.Close();

都很正常没什么问题 不过这是测试阶段,现在要交付项目结果发现一个事情.

对方给我一个2个IP(联通跟电信) 他们映射到了一个电脑上(3个网卡) 都是内网IP

现在是192.168.168.1我们叫A线路 对应外网IP假设叫X
      192.168.168.2我们叫B线路 对应外网IP假设叫Y
因为没有独立的IP所以我监听的代码

TcpListener listener = new TcpListener("192.168.168.1", 8888);

这样的话 外网只能通过X线路来访问.相反也一样 监听B线路X就无法访问.

但是我部署的网站80端口 2个线路都可以访问.

有什么方法 让我这tcp程序监听1次2个网卡同时生效?

发帖子的无意间看到

IPaddress.Any

我先去测试下有没有效果….

10分
虽然.Net 2.0中的TcpListener(8888);这个重载被标记为过时了,但是用起来依然是可以的
5分
没看懂数据是哪里到哪里
你的程序放在服务器端的话 应该可以直接这样写 
TcpListener listener = new TcpListener(“localhost”, 8888);
引用 2 楼 dongxinxi 的回复:

虽然.Net 2.0中的TcpListener(8888);这个重载被标记为过时了,但是用起来依然是可以的

实际上 我就是那个意思..不过代码可能不太一样.实际上我的代码是如下的

  var  sock = new Socket(myEnd.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
  IPEndPoint myEnd=new IPEndPoint(IPAddress.Parse(Host), Port);
  sock.Bind(myEnd);
  sock.Listen(20);

其中host跟port的参数..所以就照成了上面的问题..不能玩转双网卡….

2分
引用 3 楼 jijunwu 的回复:

没看懂数据是哪里到哪里
你的程序放在服务器端的话 应该可以直接这样写 
TcpListener listener = new TcpListener(“localhost”, 8888);

不需要关注数据是通过那个ip来的,只监听本机的端口即可 
TcpListener listener = new TcpListener(“127.0.0.1”, 8888);

205分
IPaddress.Any
引用 5 楼 jijunwu 的回复:
Quote: 引用 3 楼 jijunwu 的回复:

没看懂数据是哪里到哪里
你的程序放在服务器端的话 应该可以直接这样写 
TcpListener listener = new TcpListener(“localhost”, 8888);

不需要关注数据是通过那个ip来的,只监听本机的端口即可 
TcpListener listener = new TcpListener(“127.0.0.1”, 8888);

127.0.0.1导致2个网卡都无法监听了…

最终还是我自己1L的办法 any可以了.


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明双线的服务器如何玩监听?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!