首页 新闻 会员 周边 捐助

花生壳域名,socket编程TCP方式为什么连接访问不了?

0
悬赏园豆:20 [已解决问题] 解决于 2013-09-11 18:41
公司里要用C#做一个TCP数据接收处理模块,现在先用花生壳免费域名做测试,写一个通过域名访问的客户端连接。如下:
            string strIP = Dns.GetHostEntry("sccgsqs.vicp.cc").AddressList[0].ToString();
            IPAddress ip = IPAddress.Parse(strIP);
            IPEndPoint ipEnd = new IPEndPoint(ip, port);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //尝试连接
            try
            {
                socket.Connect(ipEnd);
            }
           
         但是连接Connect机器服务端口(已经开启)时都不行(包括监听服务和客户端在本机和不同机器上都不行):
         1、如果没有激活或者是没有开启花生壳映射,则解析获取的strIP为:125.141.245.202,和花生壳提示的域名IP地址指向是一样的,和ip138.com尚查看到的也是一样的。
         2、如果花生壳开启了映射,域名IP地址指向则每次可能都不同,如图,当次为24.15.22.40,多测试几次,见过和条目1中一样的,也有过88.*.*.*等形式的IP,即是在变化的,但这几次测试,ipconfig读取的内网IP是没有变化的。 而开启映射这种情况代码解析获取到的strIP为:202.105.21.248,和花生壳的MX指向IP地址是一样的,和在ip138.com上查看的是一样的,并且在家里和单位里一直都是这个IP,感觉是和域名一样固定下来了。

         现在的问题是,域名IP地址指向是不是就是我当前对应的外网IP呢,那么激活后映射的MX的IP地址又到底是什么呢,为什么我不管是在公司登录还是家里登录(设置映射的内网IP是ipconfig读取出来的),这个MX指向的IP地址都没有变化呢,特别是设置映射后代码中解析出来的IP是这个MX指向地址。晕啊。
         不管解析出的到底是哪个IP地址,我想要的是如何通过这个域名使用TCP方式连接到监听服务端,还有什么地方没考虑到呢?
         另,服务器端IIS发布WEB网页,花生壳客户端开启时其它外网机器是可以通过这个sccgsqs.vicp.cc域名进行访问的,但不知道为什么 现在写socket客户端连接不行呢?
  
<ignore_js_op>

 

QQ图片20130910222218.jpg

摩根鱼的主页 摩根鱼 | 初学一级 | 园豆:19
提问于:2013-09-10 23:11
< >
分享
最佳答案
0

你所说的这个问题应该是涉及到NAT转发的问题,请在连接外网的路由器或网关设备上做端口映射,将使用的端口做相应的映射。

收获园豆:15
sinhbv | 老鸟四级 |园豆:2579 | 2013-09-11 09:03

谢谢你,我看了一上午,基本上也弄明白是这么个思路,但有另一个问题:我这里是公司单独拉进来的一根电线的专线,华为的一个型号为HG8210C的一个设备,应该接入的是光纤,上面接入有光信号指示、接出有网口1、网口2,还有固话语音口和IPTV等,也就是说,我不知道这算不算路由器,现在电脑就我这一台接入的,而且通过192.168.1.1登录到这个设备中,里面很简单,也没有虚拟服务器、NAT之类的设置。这种差不多直接连的设备如何设置端口映射呢,或者是我可以把它理解成以前的猫,直接连上电脑上网,如何设置端口映射。

 

还有一种情况是,外网接入进来,先接入交换机,交换机再分发接向路由器,要实现外网访问的电脑接在该路由器上,也即内网有多级路由,那是不是交换机和路由器都要分别进行映射才可以呢

摩根鱼 | 园豆:19 (初学一级) | 2013-09-11 12:58

@摩根鱼: 那要看你本机的ip地址是不是公网地址,如果说的话,应该就不用映射了。如果说有很多级的路由的话,应该是需要每一个节点做一次映射。

sinhbv | 园豆:2579 (老鸟四级) | 2013-09-11 14:00

@sinhbv: 嗯,谢谢,基本搞明白一些了,确实是被电信NAT了,这个ipconfig中读取出来的并不是是公网IP,而花生壳解析出来的、C#中Dns.GetHostEntry("sccgsqs.vicp.cc").AddressList[0].ToString()读取出来的和ip138.com查询出来的是一致的,才是真正的公网IP,不过我好奇的是为什么外网机器通过域名访问我的IIS页面是可以的呢?

摩根鱼 | 园豆:19 (初学一级) | 2013-09-11 15:39

@摩根鱼: 也许是花生壳的客户端访问其服务器端,进行了NAT穿透。

sinhbv | 园豆:2579 (老鸟四级) | 2013-09-11 15:59
其他回答(4)
0

楼上正解。你一定是使用共享路由了,所分配的ip是私有地址。要做端口映射。

收获园豆:2
angelshelter | 园豆:9914 (大侠五级) | 2013-09-11 09:34
0

直接用IP能连接吗?

收获园豆:1
dudu | 园豆:30436 (高人七级) | 2013-09-11 09:52
0

说实话,我没看明白,不过我有个方法,假设你有台服务 A 使用了花生壳域名解析,然后你在 A 的 IIS 上部署一个静态页面 test.txt,然后你在测试机上去打开IE,输入此页面的 url 地址,如果能够正确打开,那么你可以用抓包工具把整个过程都抓下来,你分析下 TCP 包,你就知道你的程序该怎么写了;如果打不开的话,那就是你的花生壳设置不对。

收获园豆:2
Launcher | 园豆:45050 (高人七级) | 2013-09-11 10:39
2

做花生壳的内网穿透 配置IIS  然后客户端的socket("域名":外网端口)  服务端(内网端口) 刚刚实验成功

峰峰峰2017 | 园豆:202 (菜鸟二级) | 2017-05-11 10:54

兄弟,试了你的方法,我也成功了,谢谢

支持(1) 反对(0) Sam_hover | 园豆:200 (初学一级) | 2018-05-07 20:56

我也成功了,谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢~~~~~

支持(0) 反对(0) Alone_GG | 园豆:200 (初学一级) | 2018-05-07 20:59

谢谢! 搞了一天,按你说的方式完美解决了

支持(0) 反对(0) _小丑 | 园豆:200 (初学一级) | 2021-08-07 19:12

想请问一下这是为什么呀?

支持(0) 反对(0) _小丑 | 园豆:200 (初学一级) | 2021-08-07 19:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册