一次对TCP打洞的网络测试

在博客找了份基于tcp p2p连接的代码, 弄了台公网服务器测试,发现怎么也打不通,尝试两台客户端分别连路由器wifi和手机热点来改变网络环境测试都失败.

于是又弄了台内网服务器, 两台处于不同内网的电脑当客户端发现测试成功.

到底是为什么呢?查阅了许多资料, 我们知道tcp打洞是基于端口重用, 于是写了份代码测试

客户端

java 复制代码
public class Client {

    public static void main(String[] args) {
        try {
            // 新建一个socket通道
            Socket socket = new Socket();
            // 设置reuseAddress为true
            socket.setReuseAddress(true);

            //TODO在此输入外网地址和端口
//            String ip2 = "172.16.1.38";
//            String ip = "172.240.1.56";
            String ip  = "42.51.5.178";
            String ip2 = "61.243.3.19";
            int port = 5000;
            System.out.println("1connect to " + ip + ":" + port);
            socket.connect(new InetSocketAddress(ip, port));

            Thread.sleep(3);

            Socket newsocket = new Socket();

            newsocket.setReuseAddress(true);
            newsocket.bind(new InetSocketAddress(
                    InetAddress.getLocalHost().getHostAddress(), socket.getLocalPort()));


            System.out.println("2connect to " + ip2 + ":" + port);

            newsocket.connect(new InetSocketAddress(ip2, port));


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

服务端

java 复制代码
public class Server {
    public static void main(String[] args) {
        try {
            // 1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket = new ServerSocket(5000);
            Socket socket = null;
            System.out.println("***服务器即将启动,等待客户端的连接***");
            // 循环监听等待客户端的连接
            while (true) {
                // 调用accept()方法开始监听,等待客户端的连接
                socket = serverSocket.accept();
                System.out.println("收到一个连接:" + socket.getInetAddress().getHostAddress() + ":" + socket.getPort());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

测试结果:

在内网中的172.16.1.38/172.240.1.56重用连接成功,且两次公网ip和端口一样! 外网服务器42.51.5.178/61.243.3.19连接失败, 切换网络环境也是失败,应该是我这公网NAT不支持端口重用.

相关推荐
AI周红伟1 小时前
周红伟:运营商一季度净利集体下滑 Token运营提速
大数据·网络·人工智能
marsh02062 小时前
43 openclaw熔断与降级:保障系统在异常情况下的可用性
java·运维·网络·ai·编程·技术
汽车仪器仪表相关领域2 小时前
Kvaser Memorator Professional 5xHS CB:五通道CAN FD裸板记录仪,赋能多总线系统集成测试的旗舰级核心装备
大数据·网络·人工智能·单元测试·汽车·集成测试
初学者,亦行者3 小时前
计算机网络必考:一文吃透 TCP/IP 体系结构(附高清思维导图)
网络·tcp/ip
段一凡-华北理工大学3 小时前
【高炉炼铁领域炉温监测、预警、调控智能体设计与应用】~系列文章10:实时预警机制:跑在问题前面!
网络·人工智能·python·知识图谱·高炉炼铁·工业智能体
WJ.Polar4 小时前
Scapy基本应用
linux·运维·网络·python
@insist1234 小时前
信息安全工程师-入侵检测核心技术、APT 应对与工程实践
网络·安全·软考·信息安全工程师·软件水平考试
CDN3605 小时前
[硬核] 你的DNS正在“裸奔”?用Python手撕DNS劫持与隧道检测逻辑
开发语言·网络·python
凯瑟琳.奥古斯特5 小时前
DNS解析全流程详解
网络·网络协议
Yupureki5 小时前
《Linux网络编程》5.HTTPS协议
linux·网络·https