日期:2014-05-17  浏览次数:20706 次

一直困扰我的ip问题
a和b,分别为局域A和局域网B(A和B都连接internet上)中的计算机,现在写了个tcp聊天程序(局域网中可以通讯),
如何得到a和b的ip,使其能够通讯?

------解决方案--------------------
顶顶顶顶顶顶顶顶顶顶
------解决方案--------------------
局域网用的局域网IP 你不会还是填写的双方的局域网IP在通讯吧?

要公网IP 同时还要在双方交换机上做端口映射 映射到你程序需要的端口 这样才能通讯
------解决方案--------------------
楼主可以搜索一下 tcp打洞
------解决方案--------------------
lz可以再写一个服务端,固定机器上安装这个服务端,而这个服务端的外网ip你是知道的;然后其他局域网内的客户端,也就是你的聊天程序一旦上线就向这个指定的服务端发送消息(包括其ip);然后告知其他已经上线的客户端刚上线的客户端的ip,这样客户机间就可以通信了,当然也可以经过服务端转发通信~~
------解决方案--------------------
AB两个局域网的外网IP是动态还是静态?如果是静态的直接把IP添加进去就行了。

动态的话最好找个服务器中转一下。
------解决方案--------------------
本机测试好了后,
然后放到AB只需要在双方做端口映射 就可以了
------解决方案--------------------
局域网能够通信采用的UDP协议(ARP广播),局域网一般是在同一个网段,子网掩码一样,这样通信很容易,局域网可以畅所欲言的聊天!!
私有网段的IP在Internet上是不能进行通信的,而我们能够进行网上冲浪,是通过把我们的IP地址进行转换成共有网段的IP地址进行上网的,通常所谓的NAT!!

可以采取一种方法,两个人通过QQ聊天,先用DOS命令:netstat -an 查看本机与哪些Ip建立连接,截个图以便进行比较,突然关闭QQ聊天,再用DOS命令netstat -an 查看会话,会发现有个会话已经断掉,这样可以找到对方转换后的公有Ip地址,这样就可以用自己写的tcp聊天程序进行聊天(A、B采用相同的方法即可)!!

但这种方法有一个缺点,假如是通过PPOE上网,并且是通过路由器拨号几个人上网,这个方法就行不通了!!
------解决方案--------------------
楼主的需求是要让TCP协议穿透NAT
TCP打洞可以用STUNT协议
具体的函数库在这里:http://www.cis.nctu.edu.tw/~gis87577/xDreaming/XSTUNT/index.html
介绍见:http://nutss.gforge.cis.cornell.edu/stunt.php

------解决方案--------------------
用花生壳动态域名解析,申请一个帐号设置一下,就可以在因特网任何地方找到主机
------解决方案--------------------
需要在外网上建个服务器,就像qq
------解决方案--------------------
你这个应该通过一台服务器中转一下,就像楼上说的QQ那种方式