java udp 打洞,java udp 打洞

Java codeimport java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.util.Scanner;

public class TestClient

{

public static void main(String[] args) throws IOException

{

DatagramSocket clienttoclient = new DatagramSocket();

String sendStr = "hello";

byte[] sendBuf = sendStr.getBytes();

InetAddress addr = InetAddress.getByName("125.34.69.243");

int port = 8888;

DatagramPacket sendPacket

= new DatagramPacket(sendBuf ,sendBuf.length , addr , port);

clienttoclient.send(sendPacket);

new ReceiveMessages(clienttoclient);

System.out.println("输入要联系的IP地址");

Scanner in = new Scanner(System.in);

String userIP = in.next();

System.out.println("输入要联系的端口号");

int userPort = in.nextInt();

byte[] chatsendBuf = "hello".getBytes();

InetAddress chatAddr = InetAddress.getByName(userIP);

DatagramPacket chatsendPacket = new DatagramPacket(chatsendBuf,chatsendBuf.length,chatAddr,userPort);

clienttoclient.send(chatsendPacket);

System.out.println("test");

}

}

class ReceiveMessages extends Thread

{

private DatagramSocket clienttoclient;

public ReceiveMessages(DatagramSocket clienttoclient)

{

this.clienttoclient = clienttoclient;

this.start();

}

public void run()

{

System.out.println("启动监听客户端接收客户端发送的消息");

byte[] recvBuf = new byte[100];

DatagramPacket recvPacket

= new DatagramPacket(recvBuf , recvBuf.length);

try {

clienttoclient.receive(recvPacket);

} catch (IOException e) {

e.printStackTrace();

}

String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());

System.out.println("收到:" + recvStr);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UDP打洞是一种P2P通信的技术,可以让两个在NAT后面的设备直接进行通信。下面是一个简单的Java UDP打洞的示例代码: ``` import java.net.*; public class UdpHolePunching { public static void main(String[] args) throws Exception { // 定义两个NAT后面的设备的IP和端口 InetAddress client1IP = InetAddress.getByName("192.168.1.100"); int client1Port = 5000; InetAddress client2IP = InetAddress.getByName("192.168.1.101"); int client2Port = 5000; // 创建两个UDP socket,分别绑定在两个设备的IP和端口上 DatagramSocket socket1 = new DatagramSocket(client1Port, client1IP); DatagramSocket socket2 = new DatagramSocket(client2Port, client2IP); // 客户端1向客户端2发送一条消息,用来获取NAT的映射关系 String message = "Hello, Client2"; DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), client2IP, client2Port); socket1.send(packet); // 客户端2向客户端1发送一条消息,用来获取NAT的映射关系 message = "Hello, Client1"; packet = new DatagramPacket(message.getBytes(), message.length(), client1IP, client1Port); socket2.send(packet); // 等待一段时间,让NAT完成端口映射 Thread.sleep(1000); // 客户端1向客户端2发送一条消息,让两个设备之间建立P2P连接 message = "Let's start P2P communication!"; packet = new DatagramPacket(message.getBytes(), message.length(), client2IP, client2Port); socket1.send(packet); // 客户端2向客户端1发送一条消息,让两个设备之间建立P2P连接 message = "OK, let's do it!"; packet = new DatagramPacket(message.getBytes(), message.length(), client1IP, client1Port); socket2.send(packet); // 关闭socket socket1.close(); socket2.close(); } } ``` 这个示例代码中,我们创建了两个UDP socket,分别绑定在两个设备的IP和端口上。然后,客户端1向客户端2发送一条消息,客户端2向客户端1发送一条消息,用来获取NAT的映射关系。等待一段时间后,客户端1向客户端2发送一条消息,让两个设备之间建立P2P连接,客户端2向客户端1回复一条消息,表示同意建立P2P连接。最后,关闭socket。 需要注意的是,这个示例代码只是一个简单的UDP打洞的示例,实际应用中,UDP打洞还需要考虑到更多的因素,比如NAT类型、防火墙等等,需要更加复杂的技术实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值