扫面穿透技术java,Java实现TCP穿透NAT技术该如何实现

当前位置:我的异常网» J2SE » Java实现TCP穿透NAT技术该如何实现

Java实现TCP穿透NAT技术该如何实现

www.myexceptions.net  网友分享于:2015-08-26  浏览:504次

Java实现TCP穿透NAT技术该怎么实现

在做一个远程文件管理系统的时候,需要用到TCP穿透NAT技术,在网上找了很多的资料都是理论的讲解,根据理论自己琢磨了好几天,程序还是一直都有问题。请教一下高手,该怎么实现TCP穿透NAT呀!!!

我把我自己写的代码贴出来,大家看看该怎么改嘛。

在线等呃。。。

服务器的代码:

public class TcpServer{

public static int count = 0;

public static ArrayList list_address_1 = new ArrayList();

public static ArrayList list_address_2 = new ArrayList();

public static ArrayList list_port_1 = new ArrayList();

public static ArrayList list_port_2 = new ArrayList();

public static ArrayList list_socket = new ArrayList();

public TcpServer() {

try {

ServerSocket s_socket = new ServerSocket(6789);

System.out.println("服务器开始监听6789端口");

while(true) {

Socket socket = s_socket.accept();

System.out.println("客户端的IP:" + socket.getInetAddress() + "\t客户端的端口号是:" + socket.getPort());

System.out.println("IP:" + socket.getLocalAddress() + "\tPort:" + socket.getLocalPort());

try {

System.out.println("Socket is " + socket);

Thread input = new InputThread(socket.getInputStream(), socket);

input.start();

System.out.println("写入线程开启...");

Thread output = new OutputThread(socket.getOutputStream());

output.start();

System.out.println("输出线程开启...");

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("Message is " + e.getMessage());

e.printStackTrace();

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("Message " + e.getMessage());

e.printStackTrace();

}

}

public static void connect() {

Socket socket_1 = list_socket.get(0);

Socket socket_2 = list_socket.get(1);

OutputStream out_1 = null;

OutputStream out_2 = null;

try {

out_1 = socket_1.getOutputStream();

out_2 = socket_2.getOutputStream();

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("Conect " + e.getMessage());

e.printStackTrace();

}

Writer writer_1 = new OutputStreamWriter(out_1);

Writer writer_2 = new OutputStreamWriter(out_2);

String str_1_1 = new String(list_address_1.get(1).toString().getBytes(), 1, list_address_1.get(1).toString().getBytes().length - 1);

String str_1_2 = new String(list_address_2.get(1).toString().getBytes(), 1, list_address_2.get(1).toString().getBytes().length - 1);

String str_2_1 = new String(list_address_1.get(0).toString().getBytes(), 1, list_address_1.get(0).toString().getBytes().length - 1);

String str_2_2 = new String(list_address_2.get(0).toString().getBytes(), 1, list_address_2.get(0).toString().getBytes().length - 1);

String msg_1 = ":" + str_1_1 + ":" + list_port_1.get(1) + ":" + str_1_2 + ":" + list_port_2.get(1);

String msg_2 = ":" + str_2_1 + ":" + list_port_1.get(0) + ":" + str_2_2 + ":" + list_port_2.get(0);

try {

writer_1.write(msg_1);

writer_1.flush();

writer_2.write(msg_2);

writer_2.flush();

System.out.println("开始中转连接");

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("456_" + e.getMessage());

e.printStackTrace();

}

}

public static void main(String[] args) {

new TcpServer();

}

}

class InputThread extends Thread {

InputStream in = null;

Socket socket = null;

public InputThread(InputStream input, Socket socket) {

this.in = input;

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值