怎么写一个socket编程,不管是udp的还是tcp的,可以不在同一个局域网中通信?

以前做练习的时候 ,都是同一个网段,同一个局域网中的 没连接外网,,
现在想实现一个和qq一样的socket编程,一个在另一个内网中,另一个在那边的内网 ,都不在公网中,
谁给提供一下思路??
例如一个 在中国 ,一个在美国 两个怎么通信??需要在公网中弄个服务器?

网络通讯很简单的道理 通许必须有一方是公网地址 这个所谓的公网地址简单理解就是互联网上公开的地址,能够背直接访问的IP地址
那么你如果想实现中国到美国的通讯(下面简称2方通讯)方法有一下几种
方法1:
中国这边或者美国那边至少一方是具有公网IP地址的 具有公网地址的作为服务端 另外一方作为客户端连接(具体实现就是公网一方监听自己的公网地址上的某个端口 客户端直接连接对方的公网地址跟端口即可)( A<=====>B(公网地址) )
方法2:
2方都具有公网地址 那就更简单 互相连接对方的公网地址跟端口即可(A(公网)<======>B(公网))
方法3:
2方都没有公网地址(但是其中一方或者双方都能在路由器上做端口映射 这个问题就转化成了方法2 或者方法1)(A(端口映射)<===========B)
方法4:
2方都没有公网地址也无法做端口映射 这个时候就要假设一个中转的服务器 2方都去连接那个中转服务器 通过服务来转发消息(A(内网)<===============(消息中转服务器)============>B(内网))
目前QQ就是用的这样的消息传送方式追问

需要去买一个公网的ip地址吗???

追答

一方能做端口映射是最好也是最便宜的做法了 2边都没办法做的话 只能购买一个很便宜的主机空间作为中转服务器了
有一个中转服务器可以实现离线留言的功能

貌似好像普通的托管主机不支持.exe程序的执行

追问

怎么端口映射啊???在程序里写,还是配置路由器

追答

在路由器里面 或者在你的网关电脑上配置一条静态路由

追问

我的网络貌似 已经路由了n边了 。。。映射有用吗?

追答

看看你电脑有没有防火墙先关一下

追问

我的意思是说,我现在主机上的ip地址,从真正的接入互联网的那根线到我的电脑这 ,不知道被“路由”了几次,才分过来的,我要是映射端口,能映射到互联网上吗?

追答

每一级都要做映射,按你说的情况你应该是内网中内网的内网

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-11
主要是利用了路由器的映射关系,而两个路由器之间的通讯对你是没有关系的,也就是黑盒原理!你只要有一个公网的服务器就可以,1、一种是客户端连接服务器进行通讯,服务器转发2、是服务器把两个通讯客户端的路由映射发给对方,并维护这个路由器映射,这样两个客户端可以相互通讯!!!
第2个回答  2014-01-13
需要有一个登陆服务器,不管客户端在哪里登陆后,会在服务器登记其IP和端口,其用户端需要联系对方时,可将消息现发给服务器,由服务器转发对方;或者从服务器获取对方的ip和端口,直接发送过去。
相似回答