UDP打洞的具体原理就不细说了文章还是很多,说下我的网络环境,家里台式电脑网线连的家里路由器(移动宽带),公司台式电脑网线连的公司路由器(电信宽带),一台有公网IP的华为云主机(我是试用一个月的)
1、华为云主机UDPServer代码

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.LinkedHashMap;public class UDPServer {private static ArrayList<String> c = new ArrayList<String>();public static void main(String[] args) throws IOException, InterruptedException {DatagramSocket server = new DatagramSocket(9999);byte[] bytes = new byte[1024];while (true) {DatagramPacket packet = new DatagramPacket(bytes, bytes.length);server.receive(packet);InetAddress address = packet.getAddress();int port = packet.getPort();String s = address.getHostAddress()+":"+port;System.out.println("收到->"+s+"的消息:");if (!c.contains(s)){c.add(s);}for (String s1 : c) {if (!s1.equals(s)){byte[] b = ("this is server:"+s1).getBytes();DatagramPacket packet1 = new DatagramPacket(b, b.length, address,port);server.send(packet1);}}}}
}

2、公司台式电脑的UDPClient端代码

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;public class UDPClient {private static final ArrayList<String> c = new ArrayList<String>();private static boolean b=true;public static void main(String[] args) throws IOException, InterruptedException {DatagramSocket socket = new DatagramSocket();new Thread(()->{try {byte[] bytes = new byte[1024];DatagramPacket packet1 = new DatagramPacket(bytes, bytes.length);while (true){socket.receive(packet1);String receive = new String(bytes,0,packet1.getLength());if (receive.contains("server")){c.add(receive);}if (receive.contains("client")){b = false;}System.out.println(receive);}} catch (Exception e) {e.printStackTrace();}}).start();byte[] data1 = "client:my is company".getBytes();while (true){if (b) {DatagramPacket packet1 = new DatagramPacket(data1, data1.length, InetAddress.getByName("121.36.221.82"),9999);socket.send(packet1);}if (!c.isEmpty()){DatagramPacket packet2 = new DatagramPacket(data1, data1.length, InetAddress.getByName(c.get(0).split(":")[1]), Integer.parseInt(c.get(0).split(":")[2]));socket.send(packet2);}TimeUnit.SECONDS.sleep(2);}}
}

3、家里的台式电脑和UDPClient的代码一样,修改sleep的时间为1秒,为了区分客户端发送的消息company可以改为family。121.36.21.88是我的华为云主机公网IP,代码也没有什么逻辑就没写注释,先启动Server,再启动两个客户端代码,如果客户端不停打印出my is company的提示说明打洞成功。成功后客户端不会再给Server发送消息,后面再贴Android的demo

UDP 打洞 java demo相关推荐

  1. UDP打洞、P2P组网方式研究

    catalogue 1. NAT概念 2. P2P概念 3. UDP打洞 4. P2P DEMO 5. ZeroNet P2P 1. NAT概念 在STUN协议中,根据内部终端的地址(LocalIP: ...

  2. UDP打洞(UDP Hole Punching)原理

    一. NAT分类 根据STUN协议(RFC3489),NAT大致分为下面四类: 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端 ...

  3. 简单的p2p-demo,udp打洞

    什么是p2p: peer-to-peer,简单来说,就是两个用户可以直接进行网络通信. 为什么我们需要p2p: 1.大多数的网络状态都是用户A和用户B互相通信,需要一个中间服务器来做消息的中转.如果可 ...

  4. TCP 打洞和UDP打洞

    为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?假设现在有内网客户端A和内网客户端B,有公网服务端S.如果A和B想要进行UDP通信,则必须穿透双 ...

  5. NAT穿透(UDP打洞)

    1.NAT(Network Address Translator)介绍 NAT有两大类,基本NAT和NAPT. 1.1.基本NAT 静态NAT:一个公网IP对应一个内部IP,一对一转换 动态NAT:N ...

  6. UDP打洞NAT大致分为下面四类 P2P

    NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的. 例 ...

  7. UDP打洞程序包的源码

    C#实现UDP打洞 转自:http://hi.baidu.com/sdfiyon/blog/item/63a6e039155e02f23a87ceb1.html 下面是UDP打洞程序包的源码: //W ...

  8. 讯飞语音合成 下载音频Java Demo

    注册讯飞账号 略 实名认证 略 创建应用 添加语音合成服务 进入控制台,点击我的应用,然后添加语音合成服务(免费),并记下APPID 下载SDK 点击应用右侧的SDK下载 你将会下载到一个压缩包: 解 ...

  9. pwnat——一种无需第三方服务器就能完成NAT点对点P2P穿透的基于UDP打洞技术的新方法

    pwnat--一种无需第三方服务器就能完成NAT点对点P2P穿透的基于UDP打洞技术的新方法 简介 传统的udp打洞 UDP 打洞原理及过程 pwnat技术,无需第三方服务器! pwnat用法 pwn ...

最新文章

  1. 【原创翻译】如何命名变量
  2. 理解这几张图,你就是js小牛了
  3. 【详细注释】1058 选择题 (20 分)
  4. 码率跟视频质量有关系
  5. (转)GDB 使用方法
  6. Java基础-SSM之mybatis快速入门篇
  7. Lipo移除ORC架构
  8. 基于2440的Linux开发原理,基于S3C2440和Linux的嵌入式网络驱动程序开发
  9. Hadoop学习笔记—16.Pig框架学习
  10. Windows11移动硬盘安装
  11. 社招的我,在酷家乐的野蛮生长
  12. “绿萌”仿“大麦”演出购票APP
  13. 使用scrapy框架爬取链家网站租房信息
  14. ggplot2_coor_xxx()坐标系变换
  15. php 点击电话号码直接拨打,在网站上为手机用户提供”点击拨打电话”功能
  16. 复制链接到剪切板php,剪切复制粘贴
  17. 浏览器页面渲染机制-前端原理剖析
  18. html+css+动画过渡做遮罩层
  19. iOS最新吊炸天的资源
  20. 全国各区县经纬度查询困难?精度不够?试试自制市区县经纬度查询工具并将数据保存本地

热门文章

  1. 联芯 1860平台 icn6211 mipi to RGB 转换芯片 调试 和 st7789 LCD调试spi 9bit 模式
  2. Misc-登机牌[i春秋][150pt]
  3. jquery+bootstrap 创建日历表格
  4. 运维-jenkins发版执行远程脚本连不上ssh
  5. linux安装win镜像文件,如何在Windows,Mac和Linux上安装ISO和其他光盘映像 | MOS86
  6. 微信小程序基础篇-模板与配置
  7. Python读取excel文件和绘画饼图
  8. spring:setter注入构造器注入注解注入
  9. 为drupal安装 Php + Apache 的参考文章
  10. python 模拟考试系统_Project-OTS: Online Exam System written on Python 3. 基于Python 3的在线考试系统。...