endpoint = new IPEndPoint(IPAddress.Parse(this.SmsIP),this.SmsUserport);
listener=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(endpoint);
this.SendEvent+=new SendDelegate(TcpSerUser_SendEvent);
th = new Thread (new ThreadStart(Listen));
th.Start(); //开始监听这段代码,绑定内网ip(192.168.1.22)就正常运行,绑定外网ip就出异常.
以前不是这样的,以前绑定内网外网都没有问题的.
用路由上网的.
请教高人.
listener=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(endpoint);
this.SendEvent+=new SendDelegate(TcpSerUser_SendEvent);
th = new Thread (new ThreadStart(Listen));
th.Start(); //开始监听这段代码,绑定内网ip(192.168.1.22)就正常运行,绑定外网ip就出异常.
以前不是这样的,以前绑定内网外网都没有问题的.
用路由上网的.
请教高人.
问下跟踪查看是什么意思?
是跟代码吗?listener.Bind(endpoint);执行这句出错的
绑定的地址看看能不能在地址列表找到,如果找不到,估计会错。因为只能够绑定本机地址,你总不能绑定到一个非本机的远程地址吧?不然就乱套了。要获取地址列表,用下列代码IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ipAddr in ipHostInfo.AddressList)
{
Console.WriteLine(ipAddr.ToString());
}
Console.ReadLine();
服务器端绑定内网ip
客户端绑外网
不过有点奇怪,以前两端都绑外网ip,也能运行.现在不知道怎么就不行了.
结贴吧,谢谢各位!
客户端不管在内还是外,都绑定内网IP,然后让路由自动做NAT。客户端请求连接服务器,就连接到服务端NAT的端口上,然后服务器会得到客户端的NAT地址,就可以进行通信。
路由接受连接,自动分配NAT端口(203.115.25.76:60000) -> 连接服务器 ->
服务器路由接受请求(233.120.75.68:48000) ->
服务器路由根据端口映射连接服务器(192.168.0.100: 48000) ->
服务器接收到了客户端信息,开始通讯除了服务器需要端口映射,客户端基本上不需要做调整。