udpSocket网络编程怎么样进行外网通信?

我想请教个问题,我现在写了个聊天程序,使用udpSocket发送,目前只能在局域网中互相通信(用内网IP通信),我现在想跟外网通信,应该怎么做啊?步骤是什么?
我跟我朋友测试了,他能发送消息给我,因为我的电脑做了端口映射,他发消息到我的路由器IP上我就能收到,但是我不能发送消息给他,我这边获取到对方的IP地址是对方的路由器IP,发送消息则发送到对方的路由器IP上,对方电脑收不到,请问有什么办法在对方不做端口映射的前提下发送消息到对方电脑(类似QQ)?

另外还想问个问题:我想把自己的电脑做为服务器发布,我在家用端口映射发布了一个网站,我让我朋友帮我测试,为什么只有一个人能访问而其他人都不能访问呢?
我做了映射之后,别人还是ping不通我的IP,这是什么原因呢?
有一个人能访问就说明端口映射成功了,但是为什么其他人不能访问呢?
我的程序都是用UDP进行通信的,改成TCP有点困难,有别的办法吗?还有我想问一下目前的聊天程序好像用的都是UDP吧?比如说QQ是用的UDP还是TCP啊?
我们单位是端口和协议都限制了,只能是HTTP的80端口可以用。请问HTTP和TCP的socket通信是不是一回事呢?我改成TCP的socket是不是就可以了?

路由器的端口号 与 你机器的端口号 是不一样的(你做了端口映射,对方没有,他接收不到)

可以有个中间服务器,对方电脑先与服务器通信(告知Ip和端口),你与服务器通信(获取对方的Ip和端口),也就是NAT穿透;
路由端如何支持UPNP协议的话,应该不需要做端口映射;你可以看看UPNP协议追问

我现在有一台服务器,我把聊天程序的服务器端放在我的服务器上,对方电脑可以访问,但是服务器获取到对方电脑的IP和端口,这个IP是不是也是对方的路由器IP呢?如果是这样的话那么服务器向对方发消息不也是发到对方的路由器上吗?怎么发送到对方主机上呢?

追答

对方通过路由器 与你的服务器建立连接,这是对方电脑的端口(a)与路由器相应端口(b)有了映射关系, 消息发到路由器的b端口,就能找到对方电脑

追问

我这两天研究了一下NAT穿越和P2P打洞的技术,可以解决两个在不同路由器下的内网主机间的相互通信,但是必须要有一个公网的服务器作为中间连接者,现在又遇到个新问题,我们单位的服务器只开放了HTTP端口,我的程序是用UDP作用通信的,请问有什么办法可以解决这个问题?还有,NAT穿越是不是每个路由器都自带的功能,不需要我的程序做什么改动吧?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-05
楼主实现UDP打洞在两个局域网中的点对点通信了吗?我已经研究了很久了,但是就是无法实现,希望楼主能够帮帮我,我的QQ:540576640,谢谢了!追问

可以参考
http://blog.csdn.net/andy511823558/article/details/7755377

第2个回答  2014-01-11
这个怎么弄啊?我也在考虑,两个不在同一个路由器下的主机,实现socket通信?
相似回答