TCP socket编程 锐捷校园网建立服务端让外网连接,解决内网与外网通讯问题

      本人刚学网络编程,写了一个简单的聊天工具,分服务端和多个客户端。由于我用的是锐捷校园网,当客户端在外网试图连接时遇到了难题。

众所周知,局域网对外用的是公用IP地址,外网进来时分不清要连接的主机的地址,地址需要转换才能直接通讯。因此,要解决的问题是如何将内网的地址暴露到外网,让外网能够连接上。经过度娘的多次指导,了解到用端口映射可以解决问题。至于端口映射原理,可以去问度娘。

      由于校园网是经过层层转发出去的,而且学生没有路由等相关权限,因此,一个较为简单的方法就是借助相关工具。在这里,介绍一个好用的工具,花生壳。下面是使用教程(面向的是小白,高手勿喷)。

首先是登陆花生壳网站http://www.oray.com/

点击下载

TCP socket编程 锐捷校园网建立服务端让外网连接,解决内网与外网通讯问题_第1张图片

选择好适合自己的版本,,我选择的是6.5工程版。然后安装,安装好后点击注册,然后按要求注册账号,(身份证可百度一个哈),注册好登陆,发现已分配一个免费的域名给你,然后在域名上右键->花生壳管理->开启花生壳映射,添加映射。

TCP socket编程 锐捷校园网建立服务端让外网连接,解决内网与外网通讯问题_第2张图片

应用名称填自己编写的服务端执行文件的名字,我的是SocketServer,内网ip填自己的校园网的静态ip,内网端口填服务端执行时使用的端口,我用的是8889,然后点击确定。

等待十几秒后,就映射成功


TCP socket编程 锐捷校园网建立服务端让外网连接,解决内网与外网通讯问题_第3张图片

可以看出,外网访问服务端时应当使用端口40113。至此,网络设置已弄好(保持花生壳的运行),剩下的就是编程了。

一般情况下客户端的socket代码是这样的:

            IPAddress ip = IPAddress.Parse("172.142.0.1");//服务端的IP
            Socket clientSocket=new Socket (AddressFamily .InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            try
            {
                clientSocket.Connect(new IPEndPoint(ip, 8889));   / /服务端口

             }。。。。。。。。。。。。

但这样外网是连不上的,于是改成映射ip和端口,代码如下:

         string strIP = Dns.GetHostEntry("*******.eicp.net").AddressList[0].ToString();   // 括号里面的就是刚才申请的域名神马的,即上图显示的外网访问地址,不带后面的  :端口号
        IPAddress ip = IPAddress.Parse(strIP);

        try
         {      

              clientSocket.Connect(new IPEndPoint(ip, 40113));     //将8889端口改为40113  注:服务端那边的端口设置依然是8889


这样客户端设置后,外网的客户端就可以连接到校园网内的服务端了。

OVER






你可能感兴趣的:(TCP socket编程 锐捷校园网建立服务端让外网连接,解决内网与外网通讯问题)