小弟用socket写了一个简单的服务器,客户端测试程序。
在自己电脑上都测试正确,正常连接与发送数据。
但是让同学用外网放客户端,服务器架在我家里,却连接不上。
小弟家的网络是ADSL的一说到这个问题,可能很多人就马上觉得是老生常谈。
端口映射,花生壳,买个域名之类的想法就会马上冒出来。小弟要表达的是,小弟认为和这些东西都没有太大关系。
小弟做了2个测试1.我提供当前的外网地址(ADSL的外网地址是每次登录都会变的,这个大家应该都知道) 
外网用mstsc是可以远程登录上我的电脑。这个说明实际上我的机器就是在公网上,可以被大家访问。2.关闭防火墙后,外网ping我的IP也是可以ping的通小弟还查阅了电子工业出版社的一个菜鸟书籍上对ADSL有这么段描述:
由于ADSL的虚拟拨号方式,只有在用户拨入时才会获得一个IP地址,断开连接时又释放该ip地址,由于Internet中ip数量有限,所以当突发用户较多时,ip地址将被分配殆尽,这时后面的用户再连入将无法获取IP地址这段话似乎也在佐证这个观点:当前你ADSL登录后,分配给你的IP唯一和你的机器一一绑定了也就是你的公网IP了----都解释完这些后小弟感觉我的机器和放在公网上的普通机器好像是没有区别的。就是不知道为什么我的客户端放到外网后连我家的服务器连不通。大家请不用质疑小弟代码的问题,小弟对这些基础东西还是可以保证的。谢谢各位GGJJ不吝赐教啦。

解决方案 »

  1.   

    每一台机器的网络环境都不尽相同,能ping通也不代表所有网络端口都是通畅的,本地没问题,问题就还是出在网络环境上
      

  2.   

    如果你家里网络环境用到了路由器,才需要端口映射。如果没有路由器,直接使用IP就可以了。
    而且如果你能ping通对方,但仍然无法连接,而局域网环境下能连接的话。试着把服务器端和客户端电脑的防火墙都关了看看
      

  3.   

    主要问题还是在你设置在家里的服务器。需要服务器提供公网IP和侦听端口。其中公网IP就是你通过ADSL Modem连接到Internet时,由ISP分配给你的IP地址。
    而端口通常需要在ADSL Modem提供的NAT或者其他端口映射方式中设置。比如我电脑的本地IP为192.168.1.20,服务器侦听的是端口8888,则你需要在Modem上开个口子,能让外网向本地192.168.1.20:8888的连接被接受。同时还要考虑Windows自带的防火墙和你安装的杀软、防火墙软件的端口开放限制。这和eMule这些P2P软件设置侦听端口是一个原理。以前我写过一个eMule获取HighID的教程,您可以适当参考一下:
    http://blog.vckbase.com/abbey/articles/26924.html
      

  4.   

    拨号获得IP后
    把服务器程序和客户端程序都放在本机服务器用公网IP看看能不能通讯
      

  5.   

    谢谢gxttr建议,关闭服务器端本地防火墙的方法试验过,仍旧连不上,虽然客户端没关过,只是小弟认为和客户端防火墙关系不大,我也会去试试,谢啊!Abbey的建议挺有道理,我也觉得ip没问题,就是潜意识觉得端口应该不会出错,听你这么一说好像有点感觉,我去试试,谢谢啦!
      

  6.   

    用ghost5216的简单办法居然成功了,麻痹的。
    谢谢大家,结贴撒分了。