`

java穿透内网实现点对点通信的思考

    博客分类:
  • Java
阅读更多

1,客户端A登陆的时候,发送一个UDP数据包给服务器,然后服务器根据该包获得客户端A的IP和端口并保存到UdpAddressMap(用登录名作为key保存)中。
2,客户端A执行操作的时候,发送一个消息,带上目标客户端B的登陆名。
3,服务器端获得消息后,将客户端B的端口发送给客户端B,然后B使用该端口建立UDP监听。
4,客户端B再发送一条信息给服务器,告诉它监听已经建立,服务器将B的IP和PORT发送给客户端A。
5,客户端A获得信息后根据获得的客户端B的IP和PORT,绕过服务器,直接往客户端B发送数据。

 

-----------------------------------------------------------Q—Q群聊天------------------------------------------------------

 

老孔()  10:29:49
a,b 登录后都把ip和port注册到服务器上,a向b发消息,先调用服务器接口,这个接口把b的ip和port返回给a,然后把a的ip和port给b,a和b同时连接对方即可
老孔()  10:31:12
要注意的是国内网络有点问题,就是同一个机器在 www.ip138.com 和  www.cz88.net 上获取的ip不同,这样你的客户端程序接收到打洞的请求时,不能根据服务器回给你的客户的ip了,要根据实际的判断
老孔()  10:31:18
我们遇到这个问题的
┎.le!┎. ()  10:31:33
哦 我想想
老孔()  10:32:10
你做做就知道了
┎.le!┎. ()  10:32:40
你说的同时连接对方是指两个客户端都是即有UDP客户端又有UDP服务端吗?  而不是一个作为服务端 一个作为客户端?
老孔()  10:32:59
udp发送和接收是一个端口来的
老孔()  10:33:23
互相先发打洞的信令,通了在传业务信息

 

------------------------------------------------------------------------------------------------------------------------

改良后的思路

1,客户端A登陆的时候,发送一个UDP数据包给服务器,然后服务器根据该包获得客户端A的IP和PORT并保存到UdpAddressMap(用登录名作为key保存)中。
2,客户端A要执行数据传送的时候,发送一个信息给服务器,带上目标客户端B的登陆名。
3,服务器将A的IP和PORT发给客户端B,同时将B的IP和PORT发给客户端A。
4,客户端A打开监听并向客户端B发送打洞信息,直到收到客户端B的回应信息停止打洞,开始正常传送信息。客户端B也是如此。
5,当用户退出的时候从UdpAddressMap去除该用户的IP和PORT信息。

分享到:
评论
1 楼 wwenr 2011-02-27  
您好 我是一名在校学生 正在做一个关于即时聊天的毕设 碰到了一些问题 能不能请教您一下~~

我的QQ:53595177

相关推荐

    基于Java开发的一款基于Netty的内网穿透工具,主要用于将内网服务反向代理到公网访问.zip

    标题中的“基于Java开发的一款基于Netty的内网穿透工具”揭示了我们正在讨论的是一个使用Java编程语言,并且依赖于Netty框架的软件应用。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发服务器和...

    实现内网对点的聊天

    要实现内网中的点对点聊天,我们需要解决设备之间的通信问题,这通常涉及端口映射或NAT穿透。 1. **TCP/IP协议基础**:点对点聊天依赖于TCP/IP协议栈,其中TCP(传输控制协议)负责建立可靠的双向连接,而IP...

    WebRTC+java实现多人视频通讯

    它包括了数据通道、音频引擎和视频引擎三个主要部分,提供了P2P(点对点)的通信能力,大大简化了在网页上构建多媒体通信应用的过程。 在“WebRTC+Java实现多人视频通讯”的项目中,WebRTC主要负责前端的音视频采集...

    基于JAVA的局域网FTP

    1. **Java Socket编程**:FTP通信的基础是TCP/IP协议,Java的Socket类提供了创建和管理TCP连接的能力,使得服务器与客户端之间可以进行双向数据传输。 2. **FTP命令与响应**:FTP协议定义了一系列命令和响应码,如`...

    开源内网穿透商用平台系统

    7. **系统设计与实现**:一个完整的开源内网穿透商用平台系统可能包含用户管理、隧道管理、负载均衡、日志记录等功能模块。开发者需要理解系统架构,熟悉网络编程,以及如何利用开源组件来构建和维护这样一个平台。 ...

    LightTunnel-内网穿透工具,支持TCP、HTTP、HTTPS穿透

    内网穿透,也称为NAT穿透,是解决因网络架构导致的内网设备对外部不可见的问题。LightTunnel的特性包括对TCP、HTTP和HTTPS协议的支持,这涵盖了大部分互联网通信需求。 【TCP协议】是传输控制协议,是互联网上最...

    JAVA穿越NAT

    "JAVA穿越NAT"这一主题涉及到了如何在Java环境中实现在网络地址转换(Network Address Translation, NAT)下的点对点(P2P, Peer-to-Peer)UDP通信。NAT通常被用来让多个内部网络设备共享一个公共IP地址访问外部网络...

    Java的UDP的开发案例代码

    Java UDP 穿透 NAT 的实现是一个常见的技术挑战,特别是在P2P(点对点)通信中。NAT(网络地址转换)会隐藏内部网络的IP地址,使得直接的通信变得困难。UDP(用户数据报协议)由于其无连接、低延迟的特性,常被用于...

    NAT.rar_NAT_NAT JAVA_java nat_nat

    Java中的NAT实现主要涉及到网络编程,尤其是在处理分布式系统、P2P网络或者需要穿透NAT的场景时。Java提供了一些API来处理这些问题,如MulticastSocket和DatagramSocket,它们可以帮助开发者发送和接收UDP数据包,...

    支付宝支付有关软件都在这里.zip

    这篇文档将深入探讨与"支付宝支付有关的软件"相关的核心知识点,主要涵盖以下几个方面:NATAPP内网穿透工具、支付宝沙箱环境以及支付宝的页面支付API。 首先,我们来了解"NATAPP1分钟快速新手图文教程 - NATAPP-...

    udp 打洞示例代码 包含服务器 客户端

    UDP打洞技术是一种在NAT(网络地址转换)环境下实现两个私有网络内的主机之间直接通信的方法。在互联网上,许多设备由于连接到ISP时采用了NAT,它们的公网IP实际上是路由器分配的内部IP,因此不能直接与其他网络的...

    IceNAT:网络地址转换

    TURN服务器作为中继,帮助两端的客户端穿越NAT进行数据传输,尤其在P2P(点对点)通信中,当直接通信失败时,TURN服务器可以作为数据包的转发点。而ice4j则是一个Java实现的Interactive Connectivity Establishment ...

    holepunchsample:使用Java进行UDP打Kong的简单演示

    在计算机网络中,“打Kong”通常指的是NAT(网络地址转换)穿透技术,用于使位于NAT背后的不同设备能够直接通信,这在P2P(点对点)网络或在线游戏等场景中非常常见。 首先,我们需要理解UDP。UDP是一种无连接的、...

    测试udp打洞

    4. **UDP反射/中继**:当两台设备之间无法直接建立UDP连接时,可能需要借助TURN服务器作为中继,转发数据包以实现通信。 5. **打洞步骤**:通常包括设备A发送请求到STUN服务器,获取公网信息;设备B做相同操作;...

    Android-PC-socket.zip_android_android PC socket_android socket_a

    9. **IP和端口**:确保PC服务器的IP地址是可访问的,如公网IP或者通过内网穿透工具映射的IP。端口需要开放且不冲突,常见的端口有80(HTTP)、443(HTTPS)等,自定义端口需要确保不在系统保留范围内。 10. **TCP与...

    SSH集成代码

    5. **SSH隧道**:SSH支持端口转发,分为本地转发和远程转发,可以用来穿透防火墙,实现安全的内网服务访问。 6. **自动化脚本**:在编程中集成SSH,常用Python的`paramiko`库或Java的JSch库,它们实现了SSH2协议,...

    SSH 用户登陆

    5. **SSH隧道**:SSH还支持隧道功能,允许将本地端口转发到远程服务器,或者将远程端口转发到本地,这在穿透防火墙、访问内网资源或加密特定服务流量时非常有用。 6. **安全注意事项**:为了增强SSH的安全性,应...

    NatTraversal_Old

    综上所述,“NatTraversal_Old”是一个为Kompics/Netty提供的关键组件,它解决了NAT设备对分布式系统通信的障碍,使得内部网络中的节点可以通过NAT与外部网络进行有效通信。这一组件的实现,展示了在Java环境中处理...

Global site tag (gtag.js) - Google Analytics